DBA_USERS表中列出的用户与DBA_TAB_PRIVS表中列出的受赠方不匹配。
那么,如何获得仅在DBA_USERS表中列出的用户的特权呢?
例如,如果我做了
SELECT USERNAME FROM DBA_USERS;然后,我得到一个登录名列表,例如
USERNAME
--------
BOB17
DBA
JANET5
STEVE34
SYSTEM现在我想知道'STEVE34‘用户有哪些角色和特权。
但是当我在网上运行建议的查询时:
SELECT * FROM DBA_SYS_PRIVS;
SELECT * FROM DBA_TAB_PRIVS;
SELECT * FROM DBA_ROLE_PRIVS;“授权”列不包含‘not 17’、‘JANET5 5’、‘STEVE34 34’,而是包含'SYSTEM‘、'PUBLIC’和'DBA‘。
因此,如果'STEVE34‘不在任何特权表的授权列中,我如何才能找到用户'STEVE34’所具有的特权?
How to find the privileges and roles granted to a user in Oracle?的问题有8个答案,没有一个能解决这个问题。
我需要知道DBA_USERS中列出的用户具有哪些权限和角色,而在链接问题中的建议表中找不到这些用户。
进一步澄清:
如果我运行这个查询:
Select USERNAME, GRANTEE from dba_users u
LEFT JOIN dba_tab_privs p
ON u.USERNAME = p.GRANTEE
order by username其结果是:
USERNAME GRANTEE
-------- -------
BOB17 (null)
DBA DBA
DBA DBA
DBA DBA
DBA DBA
JANET5 (null)
STEVE34 (null)
SYSTEM SYSTEM
SYSTEM SYSTEM
SYSTEM SYSTEM如何确定不在DBA_TAB_PRIVS表中的用户的权限?
我绝对确信用户确实存在并且拥有某种特权,我看着他们登录,并看到他们成功地进行了选择查询。
发布于 2019-08-01 00:25:59
我可能会在这里遇到麻烦,但我不得不注意到用户的示例列表处于较低的情况。如果您复制并粘贴了列表(而不是顺便键入小写的名称),这意味着这些用户是使用双引号创建的。您只能在任何Oracle字典视图(例如dba_users、dba_tab_privs、dba_sys_privs、dba_role_privs)中找到它们,前提是要考虑到这一事实。双引号小写不同于未引用的用户名。
每当授权、撤消、创建表或任何其他DDL必须针对小写双引号" STEVE34“运行时,它都需要双引用,否则甲骨文将对未引用的版本不区分大小写的STEVE34运行它。
同样适用于字典视图上SQL中的where子句。双引号"steve34“变得区分大小写。
注意,在下面的示例中,我可以创建两个显然名称相同的用户,但它们是不同的Oracle用户。
FSITJA@db01> create user "steve34" identified by 123;
User created.
FSITJA@db01> create user steve34 identified by 123;
User created.
FSITJA@db01> grant create session to steve34;
Grant succeeded.
FSITJA@db01> select username from dba_users u where upper(u.username) = 'STEVE34';
USERNAME
------------------------------
steve34
STEVE34
FSITJA@db01> select * from dba_sys_privs sp where sp.grantee = 'STEVE34';
GRANTEE PRIVILEGE ADM COM
------- ---------------------------------------- --- ---
STEVE34 CREATE SESSION NO NO
FSITJA@db01> select * from dba_sys_privs sp where sp.grantee = 'steve34';
no rows selected
FSITJA@dbd01 2019-07-31 17:18:00> grant create session to "steve34" with admin option;
Grant succeeded.
FSITJA@db01> select * from dba_sys_privs sp where sp.grantee = 'steve34';
GRANTEE PRIVILEGE ADM COM
------- ---------------------------------------- --- ---
steve34 CREATE SESSION YES NOhttps://stackoverflow.com/questions/57297132
复制相似问题