許可權傳遞的一點測試!

warehouse發表於2008-04-07

記得在北京講課時曾經有學員問到過這個問題,當時沒有詳細測試,前幾天看到pub上又有人提及這類問題,簡單的測試了一下,還發現了一些問題。傳遞出去的物件許可權可以cascade回收,而傳遞出去的系統許可權卻沒有cascade回收!

[@more@]

1.物件許可權傳遞測試

C:>sqlplus xys/manager

SQL*Plus: Release 11.1.0.6.0 - Production on 星期一 4月 7 22:55:01 2008

Copyright (c) 1982, 2007, Oracle. All rights reserved.


連線到:
Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> select * from tt;

ID NAME
---------- ----------
1 a
2 a
3 "abc"
4 abcd

SQL> grant select on tt to scott with grant option;
grant select on tt to scott with grant option
*
第 1 行出現錯誤:
ORA-01917: 使用者或角色 'SCOTT' 不存在


SQL> @ C:appwchproduct11.1.0db_1RDBMSADMINscott
SQL> connect xys/manager
已連線。
SQL> grant select on tt to scott with grant option;

授權成功。

SQL> connect scott/tiger
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕


警告: 您不再連線到 ORACLE。
--這裡注意在11g中口令區分大小寫
SQL> connect scott/TIGER
已連線。
SQL> grant select on xys.tt to test;

授權成功。

SQL> desc dba_tab_privs
ERROR:
ORA-04043: 物件 "SYS"."DBA_TAB_PRIVS" 不存在


SQL> show user
USER 為 "SCOTT"
SQL> connect xys/manager
已連線。

SQL> select * from dba_tab_privs where TABLE_NAME='TT';

GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- ---------- ---------- --- ---
SCOTT XYS TT XYS SELECT YES NO
TEST XYS TT SCOTT SELECT NO NO

SQL> connect scott/TIGER
已連線。

--scott可以單獨從test中撤銷他授予test的關於xys.tt的select許可權!
SQL> revoke select on xys.tt from test;

撤銷成功。

SQL> connect xys/manager
已連線。
SQL> select * from dba_tab_privs where TABLE_NAME='TT';

GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- ---------- ---------- --- ---
SCOTT XYS TT XYS SELECT YES NO

SQL> connect scott/TIGER
已連線。
SQL> grant select on xys.tt to test;

授權成功。

--在11g中使用者名稱依然不區分大小寫
SQL> CONNECT XYS/MANAGER
ERROR:
ORA-01017: 使用者名稱/口令無效; 登入被拒絕


警告: 您不再連線到 ORACLE。
SQL> CONNECT XYS/manager
已連線。
SQL> select * from dba_tab_privs where TABLE_NAME='TT';

GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRA HIE
---------- ---------- ---------- ---------- ---------- --- ---
SCOTT XYS TT XYS SELECT YES NO
TEST XYS TT SCOTT SELECT NO NO

--注意這裡當xys從scott收回了tt表的select許可權時,scott自動也收回了他授予test的關於xys.tt表的

select許可權;也就是說物件許可權進行了cascade撤銷!

SQL> revoke select on tt from scott;

撤銷成功。

SQL> select * from dba_tab_privs where TABLE_NAME='TT';

未選定行

2.系統許可權傳遞測試

SQL> SHOW USER
USER 為 "XYS"
SQL> grant create session to scott with admin option;

授權成功。

SQL> connect scott/TIGER
已連線。
SQL> grant create session to test;

授權成功。

SQL> connect xys/manager
已連線。
SQL> select * from dba_sys_privs where grantee in ('SCOTT','TEST')
2 and privilege='CREATE SESSION';

GRANTEE PRIVILEGE ADMIN_OPTION
---------- -------------------- --------------------
SCOTT CREATE SESSION YES
TEST CREATE SESSION NO

SQL> show user
USER 為 "XYS"
SQL> connec scott/TIGER
已連線。
SQL> revoke create session from test;

撤銷成功。

SQL> connect xys/manager
已連線。
SQL> select * from dba_sys_privs where grantee in ('SCOTT','TEST')
2 and privilege='CREATE SESSION';

GRANTEE PRIVILEGE ADMIN_OPTION
---------- -------------------- --------------------
SCOTT CREATE SESSION YES

SQL> connec scott/TIGER
已連線。
SQL> grant create session to test;

授權成功。

SQL> connect xys/manager
已連線。
SQL> select * from dba_sys_privs where grantee in ('SCOTT','TEST')
2 and privilege='CREATE SESSION';

GRANTEE PRIVILEGE ADMIN_OPTION
---------- -------------------- --------------------
SCOTT CREATE SESSION YES
TEST CREATE SESSION NO

SQL> revoke create session from scott;

撤銷成功。

--這裡注意當xys從scott中收回了create session系統許可權時,scott授予test的create session並沒有

從test中被一併收回!這是系統許可權傳遞和物件許可權傳遞的區別!

SQL> select * from dba_sys_privs where grantee in ('SCOTT','TEST')
2 and privilege='CREATE SESSION';

GRANTEE PRIVILEGE ADMIN_OPTION
---------- -------------------- --------------------
TEST CREATE SESSION NO

--這裡當我們試圖讓scott從test中收回create session許可權時卻以外的得到了錯誤"ORA-01031: 許可權不

足",這也確實不難理解,因為此時scott確實沒有create session的許可權,因此他也沒有收回create

session的許可權或者說能力,總覺的這裡scott有點尷尬,與其說scott尷尬,不如說oracle尷尬;這樣設

計是否合理,還是大家來評說吧。

SQL> connect scott/TIGER
已連線。
SQL> revoke create session from test;
revoke create session from test
*
第 1 行出現錯誤:
ORA-01031: 許可權不足


SQL>

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

相關文章