Oracle

審核指定使用者對指定表的選擇查詢

  • November 18, 2013

我需要審核指定使用者針對指定表的所有 SELECT 查詢(通過訪問)。

據我所知,這不能通過正常的審計來完成;它只支持審計指定使用者的所有查詢或對指定表的所有查詢(任何使用者)。這是一個問題,因為有些系統帳戶會產生過多的審計,需要從審計中排除。

這留下了細粒度的審計,可以通過在dbms_fga.add_policy中為****audit_condition參數指定適當的謂詞來做到這一點。但是,當使用並行查詢時,FGA 會在審計跟踪中寫入重複行,這很不幸。當目標是最小化審計資訊時是不可取的。

目前,我打算使用 FGA 並經常刪除重複的行。有沒有更好的方法來實施這種審計策略?

我找到了一種通過並行查詢防止 FGA 審計跟踪中出現重複行的方法

首先創建一個函式,如果 AUTHENTICATION_METHOD 是 PQ_SLAVE 在 USERENV 上下文中返回 1(協調程序獲取 0)

create or replace function is_pg_slave return integer as
begin
 if (sys_context('USERENV', 'AUTHENTICATION_METHOD') = 'PQ_SLAVE') then
   return 1;
 else 
   return 0;
 end if;
end;
/

然後將策略添加到表

begin
     dbms_fga.add_policy(
       object_name       => 'table_name',
       policy_name       => 'noaudit_pq_slave',
       audit_condition   => 'is_pg_slave = 0',
       statement_types   => 'SELECT');
end;
/

現在只審計query coordinator,所以不管並行度是多少,fga審計跟踪中只插入一行。

與正常審計或不審計相比,我沒有註意到這種方法的任何性能問題。

引用自:https://dba.stackexchange.com/questions/51735