物件許可權的回收

yangtingkun發表於2010-09-28

物件許可權在回收時,並不是擁有授權許可權就可以回收許可權,許可權的回收還與授權使用者有關。

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

 

 

使用者即使擁有授權和回收的許可權,也不能回收其他GRANTOR的授權,甚至是物件的OWNER也不行:

SQL> CREATE USER U1 IDENTIFIED BY PASSWORD;

使用者已建立。

SQL> GRANT SELECT ON T TO U1;

授權成功。

SQL> GRANT SELECT ON T TO TEST WITH GRANT OPTION;

授權成功。

SQL> CONN TEST/PASSWORDT
已連線。
SQL> GRANT SELECT ON YANGTK.T TO U1;

授權成功。

SQL> CONN YANGTK/YANGTK
已連線。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE IN ('TEST', 'U1');

GRANTEE    OWNER                          TABLE_NAME GRANTOR    PRIVILEGE  GRA HIE
---------- ------------------------------ ---------- ---------- ---------- --- ---
U1         YANGTK                         T          TEST       SELECT     NO  NO
TEST       YANGTK                         T          YANGTK     SELECT     YES NO
U1         YANGTK                         T          YANGTK     SELECT     NO  NO

SQL> REVOKE SELECT ON T FROM U1;

撤銷成功。

SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE IN ('TEST', 'U1');

GRANTEE    OWNER                          TABLE_NAME GRANTOR    PRIVILEGE  GRA HIE
---------- ------------------------------ ---------- ---------- ---------- --- ---
U1         YANGTK                         T          TEST       SELECT     NO  NO
TEST       YANGTK                         T          YANGTK     SELECT     YES NO

SQL> REVOKE SELECT ON T FROM U1;
REVOKE SELECT ON T FROM U1
*
1 行出現錯誤:
ORA-01927:
無法 REVOKE 您未授權的許可權

同一張表可以被兩個使用者授予同樣的許可權,而回收的時候只能回收當前使用者的授權。上面展示了YANGTK使用者不能回收TEST使用者的授權,同樣TEST也不能回收YANGTK的授權:

SQL> GRANT SELECT ON T TO U1;

授權成功。

SQL> CONN TEST/PASSWORDT
已連線。
SQL> REVOKE SELECT ON YANGTK.T FROM U1;

撤銷成功。

SQL> REVOKE SELECT ON YANGTK.T FROM U1;
REVOKE SELECT ON YANGTK.T FROM U1
*
1 行出現錯誤:
ORA-01927:
無法 REVOKE 您未授權的許可權


SQL> CONN YANGTK/YANGTK
已連線。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE IN ('TEST', 'U1');

GRANTEE    OWNER                          TABLE_NAME GRANTOR    PRIVILEGE  GRA HIE
---------- ------------------------------ ---------- ---------- ---------- --- ---
U1         YANGTK                         T          YANGTK     SELECT     NO  NO
TEST       YANGTK                         T          YANGTK     SELECT     YES NO

不過對於OWNER使用者可以透過級聯的方法回收許可權:

SQL> CONN TEST/PASSWORDT
已連線。
SQL> GRANT SELECT ON YANGTK.T TO U1;

授權成功。

SQL> CONN YANGTK/YANGTK
已連線。
SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE IN ('TEST', 'U1');

GRANTEE    OWNER                          TABLE_NAME GRANTOR    PRIVILEGE  GRA HIE
---------- ------------------------------ ---------- ---------- ---------- --- ---
U1         YANGTK                         T          YANGTK     SELECT     NO  NO
TEST       YANGTK                         T          YANGTK     SELECT     YES NO
U1         YANGTK                         T          TEST       SELECT     NO  NO

SQL> REVOKE SELECT ON T FROM TEST;

撤銷成功。

SQL> GRANT SELECT ON T TO TEST WITH GRANT OPTION;

授權成功。

SQL> REVOKE SELECT ON T FROM U1;

撤銷成功。

SQL> SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE IN ('TEST', 'U1');

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

TEST的許可權回收後,TEST授權給U1的許可權自動被回收,當再次授權給TEST WITH GRANT OPTION許可權後,TESTU1的授權不會自動恢復。

 

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

相關文章