2016-09-14 25 views
2

使用Oracle XE 10g。在Oracle中查找用戶訪問的表格

我們有一個應用程序使用訪問受限的數據庫用戶。因爲通過反覆試驗找出這個用戶需要訪問哪些表是非常麻煩的,所以我們正在尋找一種方法來查詢Oracle數據字典以獲取有關表訪問的信息。

查詢會給出該用戶自某個時間點以來訪問過的表的列表,最好是這是寫入還是隻讀訪問。

這樣,我們可以對無限制訪問的用戶運行測試,找出它使用的表,然後將該用戶設置爲只能訪問這些表。

我在看V$SEGMENT_STATISTICS,但這不會記錄訪問該對象的用戶。

+0

如果你有足夠的時間也許收集數據的表觸發器會爲你做這個通過在指定的表每條語句一次登錄用戶的訪問? –

+0

您可能正在尋找[數據庫審計](http://www.oracle.com/technetwork/database/security/index-085803.html) – mustaccio

+1

db審計僅適用於企業和標準版本。 – OldProgrammer

回答

1

您可以使用AUDIT命令跟蹤訪問。這會產生大量數據,所以要小心。

從特定用戶的所有報表啓用審覈,以捕獲所有訪問:

audit all statements by jheller; 

它不會生效,直到下一次會議。重新登錄後,運行一些測試命令:

create table test1(a number); 
select * from test1; 
insert into test1 values(1); 
delete from test1; 

現在查詢DBA_AUDIT_TRAIL找到數據。審計線索中有很多垃圾,因此需要一些努力來縮小結果。

select owner, obj_name, action_name 
from dba_audit_trail 
where username = 'JHELLER' 
    and owner = 'JHELLER' 
    and timestamp > sysdate - 1 
order by timestamp desc; 

結果:

OWNER OBJ_NAME ACTION_NAME 
----- -------- -------- 
JHELLER TEST1  DELETE 
JHELLER TEST1  INSERT 
JHELLER TEST1  SELECT 
JHELLER TEST1  CREATE TABLE 
+0

當我嘗試該命令時出現錯誤。適合我的是'AUDIT ALL BY username'。但是,'DBA_AUDIT_TRAIL'仍然是空的。我需要重新啓動數據庫嗎?或者XE中未啓用此功能? – wvdz

+0

該命令在當前會話中不生效。您需要註銷並返回。 –

+0

我喜歡它,因爲這是一個很好的答案,但我不能接受它作爲正確的答案,因爲我已經確信這是一個EE功能。這可能是細粒度審計的一部分(https://docs.oracle.com/cd/B28359_01/license.111/b28287/editions.htm) – wvdz