oracle 細粒度審計(fga)

linxueguo發表於2022-01-26

細粒度審計(FGA:Fine Grained Auditing)實現對特定行和列自定義審計。

作用:使用標準的審計,可以審計誰訪問了哪些物件,但無法知道訪問了哪些行或列。細粒度的審計可解決這個問題,它不僅為需要訪問的行指定謂詞(或where子句),還指定了表中訪問的列

操作:DML(INSERT、DELETE、UPDATE、SELECT)

效能:透過只在訪問某些行和列時審計對錶的訪問,可以極大地減少審計表條目的數量

        除了簡單的跟蹤語句之外,FGA還透過在每次使用者選擇特定的資料集時執行一段程式碼,提供了一種方法來模擬用於SELECT語句的觸發器。可按表或檢視中的單個列設定重點的FGA審計選項,FGA審計選項設定可設定為條件選項,以便只在符合特定管理員定義的規範時才捕獲審計。FGA支援多個相關列。預設情況下,如果其中任何一列出現在SQL語句中,就會審計該列


常用的方法如下:

--檢視資料庫已有的審計策略
select * from dba_audit_policies;
--審計日誌
select * from dba_fga_audit_trail;
--清理日誌
truncate table sys.fga_log$;
/*
--新增審計策略
--audit_condition:限定審計記錄表示式,null表示審計所有記錄,例子中排除ogg使用者
--statement_type:審計語句型別
--audit_column_opts:在某條語句涉及AUDIT_COLUMN實參中列出的任何列或所有列的情況下,確定是否進行審計。
--選項包括DBMS_FGA_ANY_COLUMNS (預設)以及DBMS_FGA_ALL_COLUMNS
*/
begin
    dbms_fga.add_policy(
        object_schema=>'tiger',
        object_name=>'tb1',
        audit_column=>'COL1',
        policy_name=>'tb1_sga_dml',
        audit_condition=>'SYS_CONTEXT(''USERENV'',''SESSION_USER'')<>''OGG''',
        statement_type=>'UPDATE,DELETE,INSERT',
        audit_column_opts=>DBMS_FGA.ANY_COLUMNS
    );
end;
--刪除審計策略
begin
    dbms_fga.drop_policy(
        object_schema=>'tiger',
        object_name=>'tb1',
        policy_name=>'tb1_sga_dml'
    );
end;
--關閉審計策略
begin
    dbms_fga.disable_policy(
        object_schema=>'tiger',
        object_name=>'tb1',
        policy_name=>'tb1_sga_dml'
    );
end;
--開啟審計策略
begin
    dbms_fga.enable_policy(
        object_schema=>'tiger',
        object_name=>'tb1',
        policy_name=>'tb1_sga_dml',
        enable=>TRUE
    );
end;


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

相關文章