暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle审计_FGA

数据老匠 2016-09-16
1156


细粒度的审计

细粒度审计(FGA:Fine Grained Auditing)实现对特定行和列自定义审计。

作用:使用标准的审计,可以审计谁访问了哪些对象,但无法知道访问了哪些行或列。细粒度的审计可解决这个问题,它不仅为需要访问的行指定谓词(或where子句),还指定了表中访问的列

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

性能:通过只在访问某些行和列时审计对表的访问,可以极大地减少审计表条目的数量


实现包:DBMS_FGA

审计存储:FGA_LOG$

权限:必须具有执行程序包DBMS_FGA的权限


FGA的管理

查看启用情况:SELECT * FROM DBA_AUDIT_POLICIES;

查看结果:FGA_LOG$、DBA_FGA_AUDIT_TRAIL

删除:DELETE FROM FGA_LOG$;


细粒度审计与标准审计的差异

参数:标准审计必须用参数AUDIT_TRAIL在数据库级启用。这个参数不是动态的,必须重启数据库来使其生效。相比而言,FGA 不需要任何参数修改

启用:标准审计一旦被设置在一个对象上,标准审计将保持在那里。要解除它,必须用 NOAUDIT 命令删除审计选项。在一个表上丢弃审计选项也将丢弃元数据信息。而FGA 可以临时禁用和启用,不丢失任何元数据信息

类型:FGA只能够处理四种类型的语句:SELECT、INSERT、UPDATE 和 DELETE。而常规审计可以处理其它许多语句和权限,甚至会话连接和断开

存储:标准审计可以写数据库表或 OS 文件,而FGA 日志仅写到数据库表 FGA_LOG$ 中


DBMS_FGA包

作用:用于实现FGA

过程:ADD_POLICY、DROP_POLICY、DISABLE_POLICY、ENABLE_POLICY

ADD_POLICY:添加使用谓词和审计列的审计策略

DROP_POLICY:删除审计策略

DISABLE_POLICY:禁用审计策略,但保留与表或视图关联的策略

ENABLE_POLICY:启用策略


建立FGA

过程:DBMS_FGA. ADD_POLICY

OBJECT_SCHEMA:待审计对象的用户的名称,默认为当前用户 

OBJECT_NAME:待审计对象的名称 

POLICY_NAME:FGA审计策略的唯一名称 

AUDIT_CONDITION:限定被审计记录的表达式,NULL表示对任何记录的访问都会被审计

字符串:AUDIT_CONDITION => 'JOB_ID = ''AD_VP'''

数字:AUDIT_CONDITION => 'MIN_SALARY = 4200'

字符串:AUDIT_CONDITION => 

'HIRE_DATE < TO_DATE(''1990-09-09'',''yyyy-mm-dd'')'

组合:AUDIT_CONDITION => 'MIN_SALARY = 4200'

AUDIT_COLUMN:待审计列的列表,NULL表示对任何列的访问都会被审计 

HANDLER_SCHEMA:达到审计条件的用户名称,默认为当前用户 

HANDLER_MODULE:达到审计条件时所运行的PL/SQL过程 

ENABLE:表示FGA审计策略有效 

STATEMENT_TYPES:审计的语句类型,包括SELECT、INSERT、UPDATE或DELETE中的一种或多种类型。默认只涉及SELECT类型

AUDIT_TRAIL:控制是否将实际的SQL语句及其绑定变量写入FGA审计追踪。默认写入 

AUDIT_COLUMN_OPTS:在某条语句涉及AUDIT_COLUMN实参中列出的任何列或所有列的情况下,确定是否进行审计。选项包括DBMS_FGA_ANY_COLUMNS (默认)以及DBMS_FGA_ALL_COLUMNS


示例

EXEC DBMS_FGA.add_policy(object_schema => 'HR',

                                                           object_name => 'employees',

                                                            policy_name => 'pn',

                                                        audit_condition => 'email LIKE ''D%'' AND salary < 8000 AND  hire_date > to_date(''2000-01-01'',''yyyy-mm-dd'')',

                                                           audit_column => 'FIRST_NAME,LAST_NAME',

                                                     handler_schema => NULL,

                                                     handler_module => NULL,

                                                                       enable => TRUE,

                                                     statement_types =>'SELECT,INSERT,UPDATE,DELETE');


删除FGA策略:

信息:SELECT OBJECT_SCHEMA, OBJECT_NAME, POLICY_NAME

                 FROM DBA_AUDIT_POLICIES;


删除:

exec DBMS_FGA.drop_policy(object_schema => 'HR',

                                                  object_name => 'employees',

                                                  policy_name => 'a2');


文章转载自数据老匠,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论