首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当用户名不在DBA_TAB_PRIVS表中时,如何确定用户拥有什么特权?

问当用户名不在DBA_TAB_PRIVS表中时,如何确定用户拥有什么特权?
EN

Stack Overflow用户
提问于 2019-07-31 18:44:49
回答 1查看 644关注 0票数 0

DBA_USERS表中列出的用户与DBA_TAB_PRIVS表中列出的受赠方不匹配。

那么,如何获得仅在DBA_USERS表中列出的用户的特权呢?

例如,如果我做了

代码语言:javascript
复制
 SELECT USERNAME FROM DBA_USERS;

然后,我得到一个登录名列表,例如

代码语言:javascript
复制
 USERNAME
 --------
 BOB17
 DBA
 JANET5
 STEVE34
 SYSTEM

现在我想知道'STEVE34‘用户有哪些角色和特权。

但是当我在网上运行建议的查询时:

代码语言:javascript
复制
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中列出的用户具有哪些权限和角色,而在链接问题中的建议表中找不到这些用户。

进一步澄清:

如果我运行这个查询:

代码语言:javascript
复制
 Select USERNAME, GRANTEE from dba_users u
 LEFT JOIN dba_tab_privs p
 ON u.USERNAME = p.GRANTEE
 order by username

其结果是:

代码语言:javascript
复制
 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表中的用户的权限?

我绝对确信用户确实存在并且拥有某种特权,我看着他们登录,并看到他们成功地进行了选择查询。

EN

回答 1

Stack Overflow用户

发布于 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用户。

代码语言:javascript
复制
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 NO
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57297132

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档