2012-03-21 99 views

回答

127

您可以嘗試下面的這些視圖。

SELECT * FROM USER_SYS_PRIVS; 
SELECT * FROM USER_TAB_PRIVS; 
SELECT * FROM USER_ROLE_PRIVS; 

DBA和其他電力用戶可以找到授予其他用戶與DBA_版本的這些相同觀點的特權。它們涵蓋在documentation中。

這些視圖僅向用戶顯示授予的權限直接。尋找所有特權,包括那些通過角色間接授予,需要更復雜的遞歸SQL語句:

select * from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER' order by 1,2,3; 
select * from dba_sys_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3; 
select * from dba_tab_privs where grantee = '&USER' or grantee in (select granted_role from dba_role_privs connect by prior granted_role = grantee start with grantee = '&USER') order by 1,2,3,4; 
18

有各種腳本左右浮動,將做到這一點取決於你想怎麼瘋就搞定了。我會親自使用Pete Finnigan的find_all_privs script

如果你想自己寫,查詢變得相當具有挑戰性。用戶可以被授予在DBA_SYS_PRIVS中可見的系統權限。他們可以被授予在DBA_TAB_PRIVS中可見的對象權限。並且他們可以被授予在DBA_ROLE_PRIVS中可見的角色(角色可以是默認的或非默認的,並且也可以要求密碼,所以僅僅因爲用戶已被授予角色並不意味着用戶可以必須使用權限他默認通過角色獲得)。但是這些角色又可以被授予系統權限,對象權限和其他角色,可以通過查看ROLE_SYS_PRIVSROLE_TAB_PRIVSROLE_ROLE_PRIVS來查看。皮特的腳本遍歷這些關係以顯示最終流向用戶的所有特權。

+0

腳本是真棒剛剛檢查出來 – 2014-11-05 12:25:47

+1

您需要特權的UTL_FILE包,否則你得到一個錯誤運行皮特菲尼根的腳本時:「標識符‘UTL_FILE’必須聲明爲」。您可以通過SQL Developer以sys sys身份連接到sysdba,然後使用以下命令將其運行或授予您對此程序包的執行權限:授予對UTL_FILE的執行權限爲; – Jan 2016-03-23 13:49:43

+1

對於我們這些沒有'SYS'特權並且只想看看我們自己帳戶的特權的人來說,這個腳本完全沒有價值。我無法訪問腳本查看的'UTL_FILE',也無法訪問'DBA_SYS_PRIVS'和其他'DBA'和'SYS'區域。 – vapcguy 2017-05-05 21:41:57

2

您可以使用下面的代碼來得到所有用戶的所有權限列表。

select * from dba_sys_privs