我正在尝试设置一个新的数据库用户来收听我们 OracleAQ 队列中的主题。
我有一个多年前设置的老用户,可以阅读并将消息发布到队列中。
现在我正在尝试设置一个新用户,但它似乎没有所需的所有 GRANTS。
查看每个用户拥有的 GRANTS 差异的最佳方法是什么?我试图比较它们,看看有什么不同。
例如,我如何确定这是否已被授予?
grant execute on sys.dbms_aqjms to NEWUSER;
我正在尝试设置一个新的数据库用户来收听我们 OracleAQ 队列中的主题。
我有一个多年前设置的老用户,可以阅读并将消息发布到队列中。
现在我正在尝试设置一个新用户,但它似乎没有所需的所有 GRANTS。
查看每个用户拥有的 GRANTS 差异的最佳方法是什么?我试图比较它们,看看有什么不同。
例如,我如何确定这是否已被授予?
grant execute on sys.dbms_aqjms to NEWUSER;
您可以使用系统视图检查某个用户被授予了哪些权限:
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;
输出:
说明 ORD -------------------------------------------------- ---------- ---------- 授予 user1 而 user2 没有的系统权限 1 创建视图 2 授予 user2 而 user1 没有的系统权限 3 创建表 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_
系统表的版本以检查您当前登录的用户所拥有的权限。然后您可以将结果与其他用户的权限进行比较。
您已经考虑到,该用户可能被授予角色,并且该角色可能被授予角色,因此您还必须比较授予每个用户的角色。