2017-04-03 105 views
1

我要記錄在特定的表甲骨文 和pc ip addresswindows username執行所有Oracle select語句,PC name如何記錄表上的Oracle執行所有Oracle select語句

換句話說

我需要知道誰和當一個表讀取..

我搜索,發現這個查詢將返回pc ip addresswindows usernamePC name

SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), 
     SYS_CONTEXT ('USERENV', 'HOST'), 
     SYS_CONTEXT ('userenv', 'OS_USER') 
    FROM DUAL; 

但我想知道這是否會返回正確的信息時,該電腦上沒有數據庫?

因爲觸發器無法在select上啓動那麼如何處理這種情況?

我使用的Oracle Forms 6i的應用程序,如果有可能的解決方案過於

回答

2

您可以使用單獨的SQL DML/DDL語句數據庫審計。

實施例:

SQL> conn sys as sysdba 
SQL> alter system set audit_trail=DB,EXTENDED scope=spfile; 

重啓數據庫。

我有一張名爲T1的表格,我想審覈SELECT針對它的聲明。

SQL> audit select on t1 by access; 

Audit succeeded. 

SQL> select * from t1; 

no rows selected 

審覈信息可以從USER_AUDIT_TRAIL查看獲得。

SQL> select OS_USERNAME,USERNAME, USERHOST, SQL_TEXT, ACTION_NAME from dba_audit_trail where obj_name='T1'; 

OS_USERNAME  USERNAME USERHOST  SQL_TEXT   ACTION_NAME 
------------ --------- ------------ ----------------- ------------ 
oracle   JAY  myserver.js  select * from t1 SELECT 

Individually Auditing SQL Statements

+0

認爲的意志Oracle9i的工作,但它不會告訴我SQL_TEXT是圍繞他們的任何工作? – sam

+0

您可以按照我的更新建議來投影'ACTION_NAME'列,它只會告訴哪個DML/DDL被使用而不是完整的語句。 – JSapkota