细粒度审计(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;