初始化引數O7_DICTIONARY_ACCESSIBILITY

yangtingkun發表於2010-09-18

O7_DICTIONARY_ACCESSIBILITY也是和安全性有關的一個重要的初始化引數。這個引數用來控制資料字典訪問行為是否和Oracle 7中保持一致。

 

 

預設情況下,這個引數設定為FALSE,這時擁有ANY系統許可權的使用者並不能訪問SYS使用者下的物件,這些物件也包括資料字典。

SQL> SHOW PARAMETER O7

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
O7_DICTIONARY_ACCESSIBILITY          boolean     FALSE
SQL> CREATE USER U1 IDENTIFIED BY P_U1;   

使用者已建立。

SQL> GRANT CONNECT TO U1;

授權成功。

SQL> GRANT SELECT ANY TABLE TO U1;

授權成功。

SQL> SHOW USER
USER
"SYS"
SQL> CREATE TABLE T_SYS (ID NUMBER);

表已建立。

SQL> CONN U1/P_U1
已連線。
SQL> SELECT * FROM SYS.T_SYS;
SELECT * FROM SYS.T_SYS
                  *
1 行出現錯誤:
ORA-00942:
表或檢視不存在


SQL> SELECT * FROM DBA_TABLES;
SELECT * FROM DBA_TABLES
              *
1 行出現錯誤:
ORA-00942:
表或檢視不存在


SQL> SELECT * FROM V$SESSION;
SELECT * FROM V$SESSION
              *
1 行出現錯誤:
ORA-00942:
表或檢視不存在


SQL> SELECT COUNT(*) FROM SYSTEM.HELP;

  COUNT(*)
----------
       978

即使擁有SELECT ANY TABLE系統許可權,由於O7_DICTIONARY_ACCESSIBILITY引數設定為FALSE,使用者也無法訪問包括資料字典和動態檢視在內的SYS使用者下的物件。而其他使用者下的物件則都可以訪問。

其中資料字典的訪問可以透過SELECT_CATALOG_ROLE角色授予:

SQL> CONN / AS SYSDBA
已連線。
SQL> GRANT SELECT_CATALOG_ROLE TO U1;

授權成功。

SQL> CONN U1/P_U1
已連線。
SQL> SELECT COUNT(*) FROM DBA_TABLES;

  COUNT(*)
----------
      1196

SQL> SELECT COUNT(*) FROM V$SESSION;

  COUNT(*)
----------
        24

SQL> SELECT * FROM SYS.T_SYS;
SELECT * FROM SYS.T_SYS
                  *
1 行出現錯誤:
ORA-00942:
表或檢視不存在

但是SYS使用者下的其他表,使用者仍然沒有許可權訪問。

如果將O7_DICTIONARY_ACCESSIBILITY設定為TRUE,則擁有ANY系統許可權的使用者可以訪問SYS使用者下的物件:

SQL> CONN / AS SYSDBA
已連線。
SQL> REVOKE SELECT_CATALOG_ROLE FROM U1;

撤銷成功。

SQL> ALTER SYSTEM SET O7_DICTIONARY_ACCESSIBILITY = TRUE SCOPE = SPFILE;

系統已更改。

SQL> SHUTDOWN IMMEDIATE
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE
例程已經關閉。
SQL> STARTUP
ORACLE
例程已經啟動。

Total System Global Area 1258291200 bytes
Fixed Size                  2040280 bytes
Variable Size             318774824 bytes
Database Buffers          922746880 bytes
Redo Buffers               14729216 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL> CONN U1/P_U1
已連線。
SQL> SELECT COUNT(*) FROM DBA_TABLES;

  COUNT(*)
----------
      1196

SQL> SELECT COUNT(*) FROM V$SESSION;

  COUNT(*)
----------
        23

SQL> SELECT * FROM SYS.T_SYS;

未選定行

 

 

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

相關文章