三个用户:SYS、lisi、wangwu
① 系统权限的传递
lisi的初始化系统权限SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---PUBLIC CREATE ANY TABLE NOLISI CREATE SESSION NOLISI CREATE TABLE NOLISI UNLIMITED TABLESPACE NOwangwu的初始化系统权限SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---PUBLIC CREATE ANY TABLE NOWANGWU CREATE TABLE NOWANGWU CREATE SESSION NOWANGWU UNLIMITED TABLESPACE NO
现在SYS将修改任意表的系统权限赋予lisi
SQL> grant alter any table to lisi;授权成功。
现在lisi的系统权限变为
SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---PUBLIC CREATE ANY TABLE NOLISI CREATE SESSION NOLISI ALTER ANY TABLE NOLISI CREATE TABLE NOLISI UNLIMITED TABLESPACE NO
注意此时新增项的ADM为NO
现在我们将修改任意表的权限由lisi赋予给wangwu
SQL> grant alter any table to wangwu;grant alter any table to wangwu*第 1 行出现错误:ORA-01031: 权限不足
表明这样是无法级联授权的,SYS用户在授予lisi权限的时候需要给予管理选项
SYS:SQL> grant alter any table to lisi with admin option;授权成功。
lisi:
SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---PUBLIC CREATE ANY TABLE NOLISI CREATE SESSION NOLISI ALTER ANY TABLE YESLISI CREATE TABLE NOLISI UNLIMITED TABLESPACE NO
这时ALTER ANY TABLE一行的ADM是yes,再将权限由lisi赋予给wangwu
SQL> grant alter any table to wangwu;授权成功。
这时wangwu还能将该权限赋予其他的用户吗?答案是NO
wangwu:
SQL> select * from user_sys_privs;USERNAME PRIVILEGE ADM------------------------------ ---------------------------------------- ---PUBLIC CREATE ANY TABLE NOWANGWU CREATE TABLE NOWANGWU CREATE SESSION NOWANGWU ALTER ANY TABLE NOWANGWU UNLIMITED TABLESPACE NO
如果需要wangwu也有授予的功能,则lisi授权时需要再加上with admin option
② 对象权限的传递
SYS用户新建一个表obj并将查询的权限赋予lisi
SQL> create table obj(id int);表已创建。SQL> grant select on obj to lisi;授权成功。
lisi查看自己的对象权限
SQL> set linesize 400SQL> select * from user_tab_privs;GRANTEE LISI OWNER SYS TABLE_NAME OBJ GRANTOR SYS PRIVILEGE SELECT GRA NO HIE NO
将对象权限赋予wangwu需要SYS赋予lisi级联权限
SQL> grant select on obj to lisi with grant option;授权成功。
wangwu:
SQL> select * from user_tab_privs;GRANTEE WANGWUOWNER SYSTABLE_NAME USER_OBJECTS GRANTOR LISIPRIVILEGE SELECT GRA NOHIE NO
同样的,如果需要wangwu也有授予的功能,则lisi授权时需要再加上with grant option。