授權物件許可權後的授權者顯示問題

yangtingkun發表於2010-09-27

對使用者授予物件許可權後,查詢資料字典,資料字典中記錄的授權者並不一定是真正授權的使用者。

 

 

能授予物件許可權的只有三種情況:一、物件的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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章