角色授予哪些特权?

时间:2016-09-26 08:37:21

标签: oracle

我有一个带有一些用户定义角色的Oracle数据库。我想创建一个具有非常相似权限的新角色(对于不同的模式,它将是相同的角色),但我无法确定此角色授予的权限。

我可以用一个查询来解决这个问题吗?

(我试过了

SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTEE IN
    (SELECT granted_role FROM DBA_ROLE_PRIVS
     WHERE GRANTEE = 'USER');

来自an answer for another question,但我得到了no rows selected。)

3 个答案:

答案 0 :(得分:1)

如果您没有选择任何行,那么您可能没有任何授予的角色。 也许你有直接授予用户的权限:

 SELECT * FROM DBA_TAB_PRIVS 
 WHERE GRANTEE = 'USER';

确保您有权访问此视图。

UPD Alex Poole

  

您可以选择目录角色。

答案 1 :(得分:1)

如果您想使用相同的权限创建新的用户,您可以授予他相同的角色,系统和对象权限:

SELECT granted_role
FROM DBA_ROLE_PRIVS
WHERE GRANTEE = 'USER'

然后将角色授予new_user

GRANT ROLE_NAME TO NEW_USER

选择直接授予用户的权限:

SELECT * FROM DBA_SYS_PRIVS 
WHERE GRANTEE='USER'

SELECT * FROM DBA_TAB_PRIVS 
WHERE GRANTEE = 'USER';

如果您想了解特定角色赋予的权限,您可以执行

SELECT * FROM DBA_TAB_PRIVS
WHERE GRANTEE IN
(SELECT granted_role FROM DBA_ROLE_PRIVS
 WHERE GRANTEE = 'USER');

SELECT * FROM DBA_SYS_PRIVS
WHERE GRANTEE IN
(SELECT granted_role FROM DBA_ROLE_PRIVS
 WHERE GRANTEE = 'USER');

查看Privilege information in data Dictionary

答案 2 :(得分:1)

您替换'USER'的值必须是有效的用户名,大写(通常 - 除非用户使用带引号的标识符创建)以匹配{{1}中的用户条目}。

如果您尝试复制该角色,您可能会发现使用the DBMS_MATADATA package更容易提取DDL和相关DDL,例如:

DBA_USERS

对于多个角色,输出不会按您所希望的顺序排列,但是如果这是一个问题,您可能会使用游标并写入文件。如果你有嵌套角色,你需要识别它们,然后获得它们的依赖DDL。