授权对象权限后的授权者显示问题

对用户授予对象权限后,查询数据字典,数据字典中记录的授权者并不一定是真正授权的用户。

 

 

能授予对象权限的只有三种情况:一、对象的OWNER;二、被授予对象权限且包含WITH GRANT OPTION权限;三、用户拥有GRANT ANY OBJECT PRIVILEGE权限:

SQL> CREATE USER U_GRANTEE IDENTIFIED BY PASSWORD;

用户已创建。

SQL> CREATE USER U_WITH_GRANT IDENTIFIED BY PASSWORD;

用户已创建。

SQL> CREATE USER U_GRANT_ANY IDENTIFIED BY PASSWORD;

用户已创建。

SQL> CREATE USER U_WITH_GRANT_AND_ANY IDENTIFIED BY PASSWORD;

用户已创建。

SQL> SHOW USER
USER
"YANGTK"
SQL> CREATE TABLE T (ID NUMBER);

表已创建。

SQL> GRANT SELECT ON T TO U_GRANTEE;

授权成功。

SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'U_GRANTEE';

GRANTEE    OWNER      TABLE_NAME GRANTOR              PRIVILEGE  GRA HIE
---------- ---------- ---------- -------------------- ---------- --- ---
U_GRANTEE  YANGTK     T          YANGTK               SELECT     NO  NO

对于第一种情况没有什么特别之处,对象的OWNER授权后,显示的授权者就是OWNER

SQL> GRANT INSERT ON T TO U_WITH_GRANT WITH GRANT OPTION;

授权成功。

SQL> GRANT CREATE SESSION TO U_WITH_GRANT;

授权成功。

SQL> CONN U_WITH_GRANT/PASSWORD
已连接。
SQL> GRANT INSERT ON YANGTK.T TO U_GRANTEE;

授权成功。

SQL> CONN YANGTK/YANGTK
已连接。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'U_GRANTEE';

GRANTEE    OWNER      TABLE_NAME GRANTOR              PRIVILEGE  GRA HIE
---------- ---------- ---------- -------------------- ---------- --- ---
U_GRANTEE  YANGTK     T          U_WITH_GRANT         INSERT     NO  NO
U_GRANTEE  YANGTK     T          YANGTK               SELECT     NO  NO

第二种情况也很正常,当拥有WITH GRANT OPTION的用户授权时,显示的GRANTOR就是执行授权命令的用户。

SQL> GRANT GRANT ANY OBJECT PRIVILEGE TO U_GRANT_ANY;

授权成功。

SQL> GRANT CREATE SESSION TO U_GRANT_ANY;

授权成功。

SQL> CONN U_GRANT_ANY/PASSWORD
已连接。
SQL> GRANT UPDATE ON YANGTK.T TO U_GRANTEE;

授权成功。

SQL> CONN YANGTK/YANGTK
已连接。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'U_GRANTEE';

GRANTEE    OWNER      TABLE_NAME GRANTOR              PRIVILEGE  GRA HIE
---------- ---------- ---------- -------------------- ---------- --- ---
U_GRANTEE  YANGTK     T          U_WITH_GRANT         INSERT     NO  NO
U_GRANTEE  YANGTK     T          YANGTK               UPDATE     NO  NO
U_GRANTEE  YANGTK     T          YANGTK               SELECT     NO  NO

第三种情况比较特别,对于拥有GRANT ANY OBJECT PRIVILEGE系统权限的用户,授权后,显示的GRANTOROWNER,而并不是执行授权命令的用户。

其实还有第四种情况,就是用户同时拥有对象的WITH GRANT OPTIONGRANT ANY OBJECT PRIVILEGE系统权限:

SQL> GRANT GRANT ANY OBJECT PRIVILEGE TO U_WITH_GRANT_AND_ANY;

授权成功。

SQL> GRANT DELETE ON T TO U_WITH_GRANT_AND_ANY WITH GRANT OPTION;

授权成功。

SQL> GRANT CREATE SESSION TO U_WITH_GRANT_AND_ANY;

授权成功。

SQL> CONN U_WITH_GRANT_AND_ANY/PASSWORD
已连接。
SQL> GRANT DELETE ON YANGTK.T TO U_GRANTEE;

授权成功。

SQL> CONN YANGTK/YANGTK
已连接。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE = 'U_GRANTEE';

GRANTEE    OWNER      TABLE_NAME GRANTOR              PRIVILEGE  GRA HIE
---------- ---------- ---------- -------------------- ---------- --- ---
U_GRANTEE  YANGTK     T          U_WITH_GRANT_AND_ANY DELETE     NO  NO
U_GRANTEE  YANGTK     T          U_WITH_GRANT         INSERT     NO  NO
U_GRANTEE  YANGTK     T          YANGTK               UPDATE     NO  NO
U_GRANTEE  YANGTK     T          YANGTK               SELECT     NO  NO

当用户同时符合后两种情况,在授权时,显示的GRANTOR仍然是执行授权命令的用户,而不再是对象的OWNER

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/4227/viewspace-674978/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/4227/viewspace-674978/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值