select any dictionary与select_catalog_role区别

本文探讨了Oracle中select any dictionary和select_catalog_role的区别,两者都能访问数据字典,但前者为系统权限,即时生效,后者是角色,需登录或设置角色后生效。select any dictionary允许查看sys表,而select_catalog_role则限制于特定视图。通过实例展示了权限的生效情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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,才能及时生效。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值