擁有GRANT ANY OBJECT PRIVILEGE許可權時的許可權回收

yangtingkun發表於2010-09-29

前一篇介紹了使用者只能回收自己授權的許可權,這篇繼續討論擁有GRANT ANY OBJECT PRIVILEGE許可權時的回收許可權。

授權物件許可權後的授權者顯示問題:http://yangtingkun.itpub.net/post/468/506156

物件許可權的回收:http://yangtingkun.itpub.net/post/468/506207

 

 

這裡繼續使用《授權物件許可權後的授權者顯示問題》中的例子,來演示擁有GRANT ANY OBJECT PRIVILEGE許可權後物件許可權的回收。

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

使用者U_GRANTEESELECT許可權是表的擁有者YANGTK授權的;INSERT許可權是擁有WITH GRANT OPTIONU_WITH_GRANT使用者授權的;UPDATE許可權是擁有GRANT ANY OBJECT PRIVILEGE許可權的U_GRANT_ANY使用者授權的,這時GRANTOR顯示的仍然是表的OWNER;最後DELETE許可權是擁有WITH GRANT OPTIONGRANT ANY OBJECT PRIVILEGE許可權的U_WITH_GRANT_AND_ANY使用者授權的。

在上一篇許可權的回收提到了一個使用者可以被多個使用者授予相同的許可權,從而在資料字典中可以查詢到多條記錄。那麼擁有GRANT ANY OBJECT PRIVILEGE許可權的使用者是如何回收授權的:

SQL> CONN U_GRANT_ANY/PASSWORD
已連線。
SQL> REVOKE UPDATE ON YANGTK.T FROM U_GRANTEE;

撤銷成功。

SQL> REVOKE SELECT ON YANGTK.T FROM 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

由於擁有GRANT ANY OBJECT PRIVILEGE系統許可權的使用者授權後,顯示的GRANTOR為物件的OWNER,因此這種使用者可以回收GRANTOROWNER的授權,即使這個授權並非是當前使用者授權的。

這種情況其實比較簡單,對於同時擁有GRANT ANY OBJECT PRIVILEGEWITH GRANT OPTION許可權的使用者而言,回收物件許可權更復雜一些:

SQL> GRANT DELETE 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          U_WITH_GRANT_AND_ANY DELETE     NO  NO
U_GRANTEE            YANGTK     T          U_WITH_GRANT         INSERT     NO  NO
U_GRANTEE            YANGTK     T          YANGTK               DELETE     NO  NO

SQL> CONN U_WITH_GRANT_AND_ANY/PASSWORD
已連線。
SQL> REVOKE DELETE ON YANGTK.T FROM 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               DELETE     NO  NO

SQL> CONN U_WITH_GRANT_AND_ANY/PASSWORD
已連線。
SQL> REVOKE DELETE ON YANGTK.T FROM 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

這種使用者回收物件許可權時,會先回收GRANTOR為當前使用者的許可權,如果再次執行回收操作或者GRANTOR為當前使用者的授權不存在時,會回收GRANTOROWNER的許可權。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/4227/viewspace-675132/,如需轉載,請註明出處,否則將追究法律責任。

相關文章