ORACLE数据库-数据控制语言DCL

来源:互联网 发布:unity3d增强现实插件 编辑:程序博客网 时间:2024/05/23 14:07

------------------------数据控制语言-----

数据控制语言(data control language,DCL)
在SQL中,数据控制功能包括事务管理功能和数据保护功能,即数据库的恢复、
并发控制、数据库的安全性和完整性控制等。这里主要说一下数据库的安全性控制功能。
数据库管理系统(DBMS)必须具备以下功能:
         1.将授权的决定告知系统,这是有SQL的GRANT和REVOKE语句来完成的;
         2.将授权的结果存入数据字典;
         3.当用户提出操作请求时,根据授权情况进行检查,以决定是否执行操作请求。

-----GRANT 语句

--向用户授予权限
--GRANT <权限 >[,<权限 >] ...
--[ON <对象类型 ><对象名>]
--TO <用户>[,<用户>]...
--[WITH GRANT OPTION]

权限的分类:

(1)对属性列(TABLE COLUMN)和视图(TABLE VIEW)的操作权限包括SELECT\INSERT\UPDATE\DELETE以及这四种权限的总和ALLPRIVILEGES。
(2)对基表(TABLE)的操作权限包括查询(SELECT)、插入(INSERT)、修改(UPDATE)、删除(DELETE)、修改表(ALTER)、建立索引(INDEX)、六种权限的总和(ALLPRIVILEGES)。
(3)对数据库(DATABASE)可以有建表的权限(CREATE TABLE),该权限属于DBA,可由DBA授予权限给普通用户,普通用户有此权限后可以建表,基表的所有者拥有对该表的一切操作权限。
   对数据库的权限即系统权限还包括 CREATE SESSION(登录数据库的权限)、CREATE SEQUENCE、CREATE VIEW、CREATE PROCEDURE 等。
   ALTER ANY TABLE( 可以修改所有表的权限)
   SELECT ANY TABLE(可以查询所有表的权限)
   注意:不针对对象的权限就是系统权限,对象指(表、视图等)
接受权限的用户可以是一个或者多个用户,也可以是全体用户(PUBLIC)。
如果指定了 WITH GRANT OPTION 则获得某种权限的用户可以把这种权限再授予给其他用户,若是没有指定该子句,则获得此权限的用户只能使用该权限而不能传播该权限。
示例:

--第一:给用户分配系统权限(建立了一个用户叫 WO)

--GRANT 权限 TO 用户名;
GRANT CREATE SESSION TO WO--授予用户可以连接导数据库
GRANT CREATE TABLE TO WO--授予用户建表的权限
                       --ORA-01031: 权限不足(权限不足所报的错误)
GRANT INSERT ANY TABLE TO WO --插入表的权限
GRANT UPDATE ANY TABLE TO WO --修改表的权限
GRANT UNLIMITED TABLESPACE TO WO --授予用户可以使用表空间
GRANT CREATE USER TO WO --授予用户可以创建用户
GRANT DROP USER TO WO --授予用户删除用户的权限
查询当前用户所拥有的系统权限:
SELECT * FROM user_sys_privs;--这是一个视图;

--第二:给用户分配对象权限

--GRANT 权限 ON schema.对象名 TO 用户名;
GRANT SELECT,UPDATE,INSERT ON EMP TO WO --在用户SCOTT 下将EMP 表的权限给了用户WO 
在用户WO中查询EMP表:SELECT * FROM SCOTT.EMP;
在用于WO中更新EMP表:UPDATE SCOTT.EMP SET DEPTNO=20 WHERE DEPTNO=30
GRANT ALL ON EMP TO WO;--将对象上所有的权限都给某人
GRANT INSERT ON EMP TO PUBLIC;--PUBLIC 表示所有用户
ALL 权限不包括 DROP 哦!
GRANT ALL ON SCOTT TO WO;--ORA-00942: 表或视图不存在
GRANT SELECT TO WO;--ORA-01919: 角色 'SELECT' 不存在--(对象权限就得赋予给对象)
GRANT SELECT ON EMP TO SCOTT;--在SCOTT 里运行的且EMP 表是SCOTT 的,则报错--ORA-01749: 用户不能自己为自己 GRANT/REVOKE 权限
查询当前用户所具有的权限:
SELECT * FROM user_tab_privs;

--第三:将权限控制在表列级别上

--GRANT UPDATE(列名) ON 表名 TO 用户名 (只能修改表中固定的列)
--GRANT INSERT (列名) ON 表名 TO 用户名(只能插入表中固定的列)
查询 SELECT,删除 DELETE 不能控制到列级别

--第四:权限的传递

--将自己拥有的权限继续分配给别人
系统权限的传递:GRANT 权限 TO 用户名 WITH ADMIN OPTION
对象权限的传递:GRANT 权限 TO 用户名 WITH GRANT OPTION

-------------REVOKE 语句

--授予的权限可以由DBA 或其他授权者用REVOKE 语句收回,REVOKE 语句的一般格式为:
--REVOKE <权限>[,<权限>]...
--[ON <对象类型><对象名称>]
--FROM <用户>[,<用户>]...;
如果USER1将一个权限给了USER2,USER2又给了USER3,则在执行DBMS回收USER1的权限时,也会同时收回USER2和USER3的权限,
即收回权限的操作会级联下去。
系统权限收回:REVOKE 权限 FROM 用户名;
对象权限收回: REVOKE 权限 ON 对象名 FROM 用户名;















原创粉丝点击