三个用户:SYS、lisi、wangwu
① 系统权限的传递
lisi的初始化系统权限 SQL> select * from user_sys_privs; USERNAME PRIVILEGE ADM ------------------------------ ---------------------------------------- --- PUBLIC CREATE ANY TABLE NO LISI CREATE SESSION NO LISI CREATE TABLE NO LISI UNLIMITED TABLESPACE NO wangwu的初始化系统权限 SQL> select * from user_sys_privs; USERNAME PRIVILEGE ADM ------------------------------ ---------------------------------------- --- PUBLIC CREATE ANY TABLE NO WANGWU CREATE TABLE NO WANGWU CREATE SESSION NO WANGWU 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 NO LISI CREATE SESSION NO LISI ALTER ANY TABLE NO LISI CREATE TABLE NO LISI 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 NO LISI CREATE SESSION NO LISI ALTER ANY TABLE YES LISI CREATE TABLE NO LISI 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 NO WANGWU CREATE TABLE NO WANGWU CREATE SESSION NO WANGWU ALTER ANY TABLE NO WANGWU 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 400 SQL> 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 WANGWU OWNER SYS TABLE_NAME USER_OBJECTS GRANTOR LISI PRIVILEGE SELECT GRA NO HIE NO
同样的,如果需要wangwu也有授予的功能,则lisi授权时需要再加上with grant option。