O7_DICTIONARY_ACCESSIBILITY
缺省的数据字典基础表仅限具有SYSOPER或SYSDBA权限的用户,通过授予相应的权限,其他用户可以获得数据字典表的访问权限。为了控制普通用户对于字典表的访问,Oracle引入了此初始化参数。
在Oracle9i之前,这个参数缺省值为TRUE。在Oracle8中,通过这个参数的机制可以控制用户对于字典对象的访问。
当该参数设置为FALSE时,SELECT ANY TABLE的系统权限并不能使用户获得访问数据字典的权限,但是仍然可以访问其他用户的数据表
Oracle通过O7_DICTIONARY_ACCESSIBILITY将部分ANY权限对访问数据字典和普通用户对象的权限界定开来。
从Oracle9i开始,O7_DICTIONARY_ACCESSIBILITY参数缺省值即为FALSE。
conn sys/oracle
ERROR:
ORA-28009: connection as SYS should be as SYSDBA or SYSOPER
而如果将O7_DICTIONARY_ACCESSIBILITY参数设置为TRUE,SYS用户登录时就不会出现该错误提示:
alter system set O7_DICTIONARY_ACCESSIBILITY=true scope=spfile;
shutdown immediate;
startup
connect sys/oracle
Connected.
为了弥补O7_DICTIONARY_ACCESSIBILITY参数设置为FALSE带来的影响,在Oracle9i中,Oracle引入了SELECT ANY DICTIONARY的系统权限,这个权限可以使用户获得数据字典的访问权限:
通过测试我们注意到,如果仅有SELECT ANY DICTIONARY可以使用户具备访问数据字典的权限,但是不能使用户获得访问其他用户表的权限。
也就是说:
O7_DICTIONARY_ACCESSIBILITY=TRUE + SELECT ANY TABLE
=
O7_DICTIONARY_ACCESSIBILITY=FALSE + SELECT ANY TABLE + SELECT ANY DICTIONARY
SELECT_CATALOG_ROLE 角色是Oracle8中引入的,用于限制用户对于SYS拥有的视图的访问:




