我正在尝试设置一个新的数据库用户来收听我们的OracleAQ队列中的主题。
我有一个多年前设置的旧用户,可以读取消息并将消息发布到队列中。
现在我正在尝试建立一个新用户,似乎它没有所需的所有GRANTS。
查看每个用户的GRANTS差异的最佳方法是什么?我试图比较它们,看看有什么不同。
例如,如何确定是否已授予此权限?
grant execute on sys.dbms_aqjms to NEWUSER;
答案 0 :(得分:3)
您可以使用系统视图检查某个用户被授予的权限:
USER_SYS_PRIVS
- 授予当前用户的系统权限DBA_SYS_PRIVS
- 授予用户和角色的系统权限USER_TAB_PRIVS
- 授予用户为授予者,受让人或所有者的对象ALL_TAB_PRIVS
- 授予用户为授权者,被授予者,所有者或已启用角色或PUBLIC
为受让人的对象DBA_TAB_PRIVS
- 授予数据库中的所有对象DBA_ROLES All
- 数据库中存在的角色DBA_ROLE_PRIVS
- 授予用户和角色的角色DBA_SYS_PRIVS
- 授予用户和角色的系统权限DBA_TAB_PRIVS
- 对用户和角色的所有对象授予ROLE_ROLE_PRIVS
- 授予角色的角色ROLE_SYS_PRIVS
- 授予角色的系统权限ROLE_TAB_PRIVS
- 授予角色的表权限例如,要检查用户具有哪个系统权限而另一个用户未被授予,反之亦然,您可以使用(您必须以SYS
用户身份运行它):
CREATE USER user1 IDENTIFIED BY user1;
GRANT CREATE SESSION TO user1;
GRANT CREATE VIEW TO user1;
CREATE USER user2 IDENTIFIED BY user2;
GRANT CREATE SESSION TO user2;
GRANT CREATE TABLE TO user2;
(SELECT 'System privileges granted to user1 which user2 does not have' AS description, 1 AS ord FROM dual
UNION
SELECT privilege, 2 FROM dba_sys_privs WHERE grantee = 'USER1'
MINUS
SELECT privilege, 2 FROM dba_sys_privs WHERE grantee = 'USER2')
UNION
(SELECT 'System privileges granted to user2 which user1 does not have', 3 FROM dual
UNION
SELECT privilege, 4 FROM dba_sys_privs WHERE grantee = 'USER2'
MINUS
SELECT privilege, 4 FROM dba_sys_privs WHERE grantee = 'USER1')
ORDER BY 2;
输出:
DESCRIPTION ORD ------------------------------------------------------------ ---------- System privileges granted to user1 which user2 does not have 1 CREATE VIEW 2 System privileges granted to user2 which user1 does not have 3 CREATE TABLE 4
要检查用户是否被授予EXECUTE ON sys.dbms_aqjms
权限,您可以发出以下查询:
GRANT EXECUTE ON sys.dbms_aqjms TO user1;
SELECT * FROM dba_tab_privs WHERE grantee = 'USER1' AND table_name = 'DBMS_AQJMS';
输出:
GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY --------- ------ ----------- -------- ---------- --------- --------- USER1 SYS DBMS_AQJMS SYS EXECUTE NO NO
如果您无权访问SYS
用户,则可以查询系统表的user_
版本,以检查您当前登录的用户拥有的权限。然后,您可以将结果与其他用户的权限进行比较。
您已考虑到,该用户可能已被授予角色,并且该角色可能被授予角色,因此您还必须比较授予每个用户的角色。