Oracle使用審計監控使用者執行過的SQL語句

eric0435發表於2012-02-22
監控使用者執行過的SQL語句,經常會使用查詢V$SQL等檢視,但這樣查不出來多次執行相同的SQL語句,使用審計可以解決這個問題,這裡採用精細審計某個使用者的所有表。
用sys使用者登記
建立下面的的過程
create or replace procedure auditUser(auditUser in varchar2,oper in int)
is
       policyName varchar2(2000);
       policynum varchar2(20);
       cursor tables is select object_name from dba_objects where wner=auditUser and              object_type='TABLE';
begin

       for tableName in tables loop
           begin
           policynum := 'AUDIT1_';
           policyName := concat(policynum,tableName.Object_Name);
           if per=1 then
           dbms_fga.add_policy(object_schema=>auditUser,object_name=>  tableName.Object_Name,policy_name => policyName,
           statement_types=>'select,insert,update,delete',enable=>true);
           end if;
           if per=0 then
           dbms_fga.drop_policy(object_schema=>auditUser,object_name=>tableName.Object_Name,policy_name => policyName);
           end if;
           exception
              when others then
               NULL;
           end;
       end loop;
       commit;
end;
查詢建立的審計策略:
select * from DBA_AUDIT_POLICIES
入參auditUser 表示要審計的使用者,oper=1表示審計使用者的所有表,oper=0表示刪除審計策略
審計完成之後最好刪除建立的審計策略。
查詢執行過的SQL語句:
select timestamp,db_user,os_user,sql_text from dba_fga_audit_trail order by timestamp desc
系統允許一段時間之後,資料量增加,查詢會很慢,可刪除表資料
truncate table fga_log$

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-716972/,如需轉載,請註明出處,否則將追究法律責任。

相關文章