簡體   English   中英

當用戶名不存在於DBA_TAB_PRIVS表中時,如何確定用戶具有哪些特權?

[英]How to determine what privileges a user has when the username is not present in the DBA_TAB_PRIVS table?

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;

“ Grantee”列中不包含“ BOB17”,“ JANET5”,“ STEVE34”,而包含“ SYSTEM”,“ PUBLIC”和“ DBA”。

因此,如果“ STEVE34”不在任何PRIVS表的“受贈方”列中,那么我如何確定用戶“ STEVE34”具有哪些特權?

問題如何在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表中的用戶的特權?

我絕對可以確定用戶確實存在並且具有某種特權,我看着他們登錄並看着他們成功地執行SELECT查詢。

我可能在這里走得很近,但我不禁注意到樣本用戶列表是小寫的。 如果您復制並粘貼列表(而不是偶然輸入小寫的名稱),則意味着這些用戶是使用雙引號創建的。 如果考慮到這一事實,則只能在任何Oracle詞典視圖(例如dba_users,dba_tab_privs,dba_sys_privs,dba_role_privs)中找到它們。 雙引號的小寫字母與非引號的用戶名不同。

每當必須針對小寫的雙引號“ steve34”運行授予,吊銷,創建表或任何其他DDL時,都需要將其雙引號,否則Oracle將針對不帶引號的版本不區分大小寫的STEVE34運行它。

這同樣適用於字典視圖上SQL中的where子句。 雙引號“ steve34”變得區分大小寫。

請注意,在下面的示例中,我可以創建2個用戶,它們的名稱顯然相同,但是它們是不同的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 NO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM