【问题标题】:How to list all the roles existing in Oracle database?如何列出Oracle数据库中存在的所有角色?
【发布时间】:2014-01-10 14:41:11
【问题描述】:

如何列出Oracle数据库中存在的所有角色?

我一直在表格中搜索:

ROLE_TAB_PRIVS
ROLE_SYS_PRIVS
ROLE_ROLE_PRIVS

SELECT * FROM ROLE_TAB_PRIVS WHERE ROLE = 'ROLETEST';

但我找不到我刚刚创建的角色。

【问题讨论】:

    标签: oracle


    【解决方案1】:

    得到答案:

    SELECT * FROM DBA_ROLES;
    

    【讨论】:

    • 接下来我需要的是包含在角色中的角色列表,即所有者和子角色。
    • 没有人知道答案吗?那我就给:SELECT * FROM dba_role_privs Gives Grantee和Granted_Role,也就是可以看到角色的子角色。
    【解决方案2】:

    all_roles.sql

    SELECT SUBSTR(TRIM(rtp.role),1,12)          AS ROLE
         , SUBSTR(rp.grantee,1,16)              AS GRANTEE
         , SUBSTR(TRIM(rtp.privilege),1,12)     AS PRIVILEGE
         , SUBSTR(TRIM(rtp.owner),1,12)         AS OWNER
         , SUBSTR(TRIM(rtp.table_name),1,28)    AS TABLE_NAME
         , SUBSTR(TRIM(rtp.column_name),1,20)   AS COLUMN_NAME
         , SUBSTR(rtp.common,1,4)               AS COMMON
         , SUBSTR(rtp.grantable,1,4)            AS GRANTABLE
         , SUBSTR(rp.default_role,1,16)         AS DEFAULT_ROLE
         , SUBSTR(rp.admin_option,1,4)          AS ADMIN_OPTION
      FROM role_tab_privs rtp
      LEFT JOIN dba_role_privs rp
        ON (rtp.role = rp.granted_role)
     WHERE ('&1' IS NULL OR UPPER(rtp.role) LIKE UPPER('%&1%'))
       AND ('&2' IS NULL OR UPPER(rp.grantee) LIKE UPPER('%&2%'))
       AND ('&3' IS NULL OR UPPER(rtp.table_name) LIKE UPPER('%&3%'))
       AND ('&4' IS NULL OR UPPER(rtp.owner) LIKE UPPER('%&4%'))
     ORDER BY 1
            , 2
            , 3
            , 4
    ;
    

    用法

    SQLPLUS> @all_roles '' '' '' '' '' ''
    SQLPLUS> @all_roles 'somerol' '' '' '' '' ''
    SQLPLUS> @all_roles 'roler' 'username' '' '' '' ''
    SQLPLUS> @all_roles '' '' 'part-of-database-package-name' '' '' ''
    etc.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-28
      • 2012-07-05
      • 1970-01-01
      • 2020-07-07
      • 2017-09-23
      • 1970-01-01
      • 2018-07-31
      • 2020-05-08
      相关资源
      最近更新 更多