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。

 

你可能感兴趣的:(oracle)