[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。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步