[oracle] oracle权限传递

 

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

 

posted @ 2013-12-30 16:27  Aviva_ye  阅读(989)  评论(0编辑  收藏  举报