2014-09-04 52 views
1

我試圖查詢Oracle數據庫以檢索連接用戶具有查詢權限的所有可用模式中的表的列表。以下查詢爲我提供了所有模式中所有表的列表,但我需要根據特權級別篩選這些結果。列出用戶在Oracle中擁有查詢權限的所有表

select OWNER || '.' || TABLE_NAME from SYS.ALL_TABLES where SECONDARY='N' 

這很好,如果用戶有更高的特權,而不僅僅選擇其他模式/表,但選擇是最低要求。這對我來說更加複雜的是,用戶可能只對架構的某些表擁有權限。我不知道如何在結果中篩選出這樣的表格。

回答

1

試試這個:

SELECT OWNER || '.' || TABLE_NAME 
    FROM SYS.ALL_TABLES 
WHERE SECONDARY = 'N' AND OWNER = 'USER1' 
UNION ALL 
SELECT OWNER || '.' || TABLE_NAME 
    FROM dba_tab_privs 
WHERE GRANTEE = 'USER1' AND privilege = 'SELECT' 

這給你所有表內,以user1的所有者和表中USER1可以選擇。我希望這可以幫助

+1

我花了一些時間來看看這個,但我可以說這樣的作品,但可能需要一些修改。有一件事是,我需要查詢all_tab_privs視圖而不是dba_tab_privs視圖。 dba_tab_privs返回0行。我注意到的另一個問題是,此查詢返回一些用戶無法訪問的表,例如屬於基於域的索引的表,如MDRT_%。我需要找到排除這些表的方法。否則,這個查詢也相當快,這是一個優勢。 – 2014-09-10 05:54:21

+0

進一步分析,我意識到從Oracle 11.2.0.4開始返回MDRT%表格。以上查詢在Oracle 11.2.0.3數據庫上運行良好。我仍然需要進一步調查以找到在較新版本的Oracle中針對此問題的解決方案。 – 2014-09-10 07:52:32

相關問題