Oracle
審核指定使用者對指定表的選擇查詢
我需要審核指定使用者針對指定表的所有 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審計跟踪中只插入一行。
與正常審計或不審計相比,我沒有註意到這種方法的任何性能問題。