我有一个带有一些用户定义角色的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
。)
答案 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');
答案 2 :(得分:1)
您替换'USER'
的值必须是有效的用户名,大写(通常 - 除非用户使用带引号的标识符创建)以匹配{{1}中的用户条目}。
如果您尝试复制该角色,您可能会发现使用the DBMS_MATADATA
package更容易提取DDL和相关DDL,例如:
DBA_USERS
对于多个角色,输出不会按您所希望的顺序排列,但是如果这是一个问题,您可能会使用游标并写入文件。如果你有嵌套角色,你需要识别它们,然后获得它们的依赖DDL。