zoukankan      html  css  js  c++  java
  • [转]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,才能及时生效。

     

     

    来源:http://blog.csdn.net/rlhua/article/details/13016635

  • 相关阅读:
    java 多线程 Callable -- 分段处理一个大的list 然后再合并结果
    java实现 比较两个文本相似度-- java 中文版 simHash 实现 ,
    spring 多线程 写入数据库 和 写入 xml文件
    爬虫入门 手写一个Java爬虫
    java web 入门级 开发 常用页面调试方法
    Java 递归调用 recursive 给一个参数 返回一大堆
    javaWeb 基础知识
    用 eclipse 创建一个简单的 meaven spring springMvc mybatis 项目
    【题解】【LibreOJ Beta Round #5】游戏 LOJ 531 基环树 博弈论
    【题解】Popping Balls AtCoder Code Festival 2017 qual B E 组合计数
  • 原文地址:https://www.cnblogs.com/gispf/p/3759148.html
Copyright © 2011-2022 走看看