文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>初始化参数O7_DICTIONARY_ACCESSIBILITY

初始化参数O7_DICTIONARY_ACCESSIBILITY

时间:2010-09-18  来源:yangtingkun

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;

未选定行

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载