数据控制语言(DCL)的功能是控制用户对数据库的存储权限。
数据库权限
在Oracle数据库中,权限分为:系统权限和对象权限。
系统权限:指对数据库执行一些特定的操作权限,例:连接数据库,创建表,删除表,修改表,创建视图、序列、进程、存储过程、表空间、用户等等。
--1、创建用户,连接用户:
create user jia identified by jia;--创建用户jia
connect jia/jia;--连接用户jia,只能在命令窗口执行,这里执行会报错,显示没有给登录权限
--2、建立用户,指定一个用户空间和一个临时表空间
create user jia identified by jia default tablespace jia1 temporary tablespace temp1;--创建用户jia,密码为jia,指定一个默认表空间为jia1,和一个临时表空间为temp1.
--3、修改用户密码
alter user jia identified by jia1;--修改用户密码,将用户jia的密码从jia修改为jia1
--4、删除用户
drop user jia;
--5、权限控制
grant create session,create user,create table to jia;--授予用户 jia create session、create user、create table等权限
grant execute any procedure to jia with admin option;--授予 jia execute any procedure权限,给用户 jia授权时,使用with admin option,因此,用户 jia还可以将获得的execute any procedure系统权限再授予其他用户
--6、通过登录jia授予用户man execute any procedure权限
connect jia/jia;--连接jia
grant execute any procedure to man;
--将系统权限create session 和execute any procedure授予所有用户
connect system/manager;
grant create session,execute any procedure to public;
--查看授予用户的系统权限,通过数据字典中的user_sys_privs视图,可以查看授予用户的系统权限,user_sys_privs视图给出用户名(username)、系统权限(privilege)、是否可以将该用户拥有的权限再授予其他用户(ADM)等信息。
--7、查看授予用户jia的系统权限
connect jia/jia;
select * from user_sys_privs;
--查看授予用户man的系统权限
connect man/man;
select * from user_sys_privs;
--8、收回用户系统权限,要从用户中撤销对象权限,仍然要使用revoke命令来完成。
revoke system_privileges from user_name;
--收回用户jia的系统权限create table,之后再查看授予用户jia的系统权限
connect system/manager;
revoke create table from jia;
connect jia/jia;
select * from user_sys_privs;
对象权限:指某一个用户对另一个用户的表、视图、存储过程、序列等进行操作权限。
--对象权限控制,对象权限控制包括对象权限的授予和收回
--授予用户对象权限
grant object_privileges_list on table_name to user_name [with grant option];
--授予用户jia在表departments上具有select、insert、update对象权限
connect system/manager;
grant select,insert,update on departments to jia;
--授予用户jia在表staff的wages、bouns列上具有update对象权限
connect system/manager;
grant update(wages,bouns) on staff to jia;
--授予用户jia在表staff1上具有select 对象权限,并指定可选项with grant option
grant select on stdff1 to jia with grant option;
--用户jia在表staff1上具有select对象权限后,即可查询表staff1
select * from system.staff1;
--通过用户jia授予用户man在表staff1上具有select对象权限
grant select on system.staff1 to man;
--查看授予用户的对象权限,通过数据字典中的user_tab_privs_recd视图,可以查看授予用户的对象权限,包括:该对象的拥有者(owner)、拥有对象权限的表(table_name)、授权者(grantor)、该对象被授予的权限(privilege)、是否可以将所具有的权限再授予其他用户(grantable)等
select owner,table_name,grantor,privilege,grantable from user_tab_privs_recd;
select * from user_tab_privs_recd;
--收回用户对象权限,要从用户中撤销对象权限,仍然要使用revoke命令来完成,其中,object_privileges指定将要收回的对象权限,user_name指定被收回对象权限的用户名
revoke object_privileges from user_name;
--收回用户jia在表staff2上的insert对象权限
connect system/manager;
revoke insert on staff2 from jia;
--收回用户man在表staff1上的select对象权限
connect jia/jia;
revoke select on system.staff1 from man;