读书人

select any dictionary与select_catal

发布时间: 2013-10-28 11:21:45 作者: rapoo

select any dictionary与select_catalog_role区别

select any dictionary与select_catalog_role

相同之处,有了这两个中的一个,基本就可以查询数据字典

不同之处:

1、select any dictionary是一种系统权限(system privilege),而select_catalog_role 是一种角色(a role)。

2、角色的话需要重新登录或者显式的set role 来生效,而赋予系统权限是立即生效的。(P.S. 同样revoke权限也是立即生效)

3、select_catalog_role可以查看一些数据字典的视图(可以看role的定义),如dba_之类的,而select any dictionary可以查看sys的表,select_catalog_role看不到。

下面具体验证一下:

2、角色的话需要重新登录或者显式的set role 来生效,而赋予系统权限是立即生效的。(P.S. 同样revoke权限也是立即生效)

select any dictionary立即生效

sys@TEST0924> desc dba_role_privs
Name Null? Type
----------------------------------------------------- -------- ------------------------------------
GRANTEE VARCHAR2(30)
GRANTED_ROLE NOT NULL VARCHAR2(30)
ADMIN_OPTION VARCHAR2(3)
DEFAULT_ROLE VARCHAR2(3)

同时开两个会话,查看情况。从上至下,按顺序。

sys@TEST0924> select * from dba_role_privs where grantee='TEST';

GRANTEE GRANTED_ROLE ADM DEF
------------------------------ ------------------------------ --- ---
TEST RESOURCE NO YES
TEST CONNECT NO YES

1、此时test用户只有resource和connect权限。

test@TEST0924> select file_id,file_name,tablespace_name from dba_data_files;
select file_id,file_name,tablespace_name from dba_data_files
*
ERROR at line 1:
ORA-00942: table or view does not exist

2、此时test用户无法访问到dba_data_files这个数据字典

sys@TEST0924> grant select any dictionary to test;

Grant succeeded.

3、将select any dictionary这个权限给test用户

test@TEST0924> select file_id,file_name,tablespace_name from dba_data_files;

FILE_ID FILE_NAME TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
4 +DATA/test0924/datafile/users.260.829650045 USERS
3 +DATA/test0924/datafile/inventory.266.829658135 INVENTORY
2 /u01/app/oracle/oradata/test0924/sysaux01.dbf SYSAUX
1 /u01/app/oracle/oradata/test0924/system01.dbf SYSTEM
5 /u01/app/oracle/oradata/test0924/example01.dbf EXAMPLE
6 +DATA/test0924/datafile/inventory03.dbf INVENTORY
8 /u01/app/oracle/oradata/test0924/undotbs02.dbf UNDOTBS2
9 /u01/app/oracle/oradata/test0924/undotbs01.dbf UNDOTBS1
10 /u01/app/oracle/oradata/test0924/inventory01.dbf INVENTORY

9 rows selected.

4、立即生效,可以查看到dba_data_files这个数据字典里面的内容

sys@TEST0924> revoke select any dictionary from test;

Revoke succeeded.

5、回收select any dictionary权限

test@TEST0924> select file_id,file_name,tablespace_name from dba_data_files;
select file_id,file_name,tablespace_name from dba_data_files
*
ERROR at line 1:
ORA-00942: table or view does not exist

6、立即生效,已经无法查看到dba_data_files这个数据字典里面的内容

select_catalog_role 无法立即生效

sys@TEST0924> grant select_catalog_role to test;

Grant succeeded.

1、授予test用户select_catalog_role角色

test@TEST0924> select file_id,file_name,tablespace_name from dba_data_files;
select file_id,file_name,tablespace_name from dba_data_files
*
ERROR at line 1:
ORA-00942: table or view does not exist

2、test用户无法访问

test@TEST0924> SELECT * FROM USER_ROLE_PRIVS;

USERNAME GRANTED_ROLE ADM DEF OS_
------------------------------ ------------------------------ --- --- ---
TEST CONNECT NO YES NO
TEST RESOURCE NO YES NO
TEST SELECT_CATALOG_ROLE NO YES NO

3、即使他的SELECT_CATALOG_ROLE为yes也不能查询到。

test@TEST0924> set role SELECT_CATALOG_ROLE;

Role set.

test@TEST0924> select file_id,file_name,tablespace_name from dba_data_files;

FILE_ID FILE_NAME TABLESPACE_NAME
---------- -------------------------------------------------- ------------------------------
4 +DATA/test0924/datafile/users.260.829650045 USERS
3 +DATA/test0924/datafile/inventory.266.829658135 INVENTORY
2 /u01/app/oracle/oradata/test0924/sysaux01.dbf SYSAUX
1 /u01/app/oracle/oradata/test0924/system01.dbf SYSTEM
5 /u01/app/oracle/oradata/test0924/example01.dbf EXAMPLE
6 +DATA/test0924/datafile/inventory03.dbf INVENTORY
8 /u01/app/oracle/oradata/test0924/undotbs02.dbf UNDOTBS2
9 /u01/app/oracle/oradata/test0924/undotbs01.dbf UNDOTBS1
10 /u01/app/oracle/oradata/test0924/inventory01.dbf INVENTORY

9 rows selected.

4、必须使用set role,才能及时生效。

读书人网 >其他数据库

热点推荐