我需要审核指定用户针对指定表的所有 SELECT 查询(通过访问)。
据我所知,这不能通过正常的审计来完成;它只支持审计指定用户的所有查询或对指定表的所有查询(任何用户)。这是一个问题,因为有些系统帐户会产生过多的审计,需要从审计中排除。
这留下了细粒度的审计,可以通过在dbms_fga.add_policy中为audit_condition参数指定适当的谓词来做到这一点。但是,当使用并行查询时,FGA 会在审计跟踪中写入重复行,这很不幸。当目标是最小化审计信息时是不可取的。
目前,我打算使用 FGA 并经常删除重复的行。有没有更好的方法来实施这种审计策略?
我找到了一种通过并行查询防止 FGA 审计跟踪中出现重复行的方法
首先创建一个函数,如果 AUTHENTICATION_METHOD 是 PQ_SLAVE 在 USERENV 上下文中返回 1(协调进程获取 0)
然后将策略添加到表
现在只审计query coordinator,所以不管并行度是多少,fga审计跟踪中只插入一行。
与正常审计或不审计相比,我没有注意到这种方法的任何性能问题。