ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 授权对象权限后的授权者显示问题

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

原创 Linux操作系统 作者:yangtingkun 时间:2010-09-27 21:57:30 0 删除 编辑

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

 

 

能授予对象权限的只有三种情况:一、对象的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系统权限的用户,授权后,显示的GRANTOR是OWNER,而并不是执行授权命令的用户。

其实还有第四种情况,就是用户同时拥有对象的WITH GRANT OPTION和GRANT 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博客 ” ,链接:https://blog.itpub.net/4227/viewspace-674978/ ,如需转载,请注明出处,否则将追究法律责任。

上一篇: 角色和用户
下一篇: 对象权限的回收
请登录后发表评论 登录
全部评论
暂无介绍

注册时间:2007-12-29

  • 博文量
    1964
  • 访问量
    11077143