三个用户: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。