Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1143300
  • 博文数量: 231
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 2662
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-03 16:35
个人简介

学无止境

文章分类

全部博文(231)

文章存档

2014年(7)

2013年(103)

2011年(11)

2010年(53)

2009年(57)

分类: Oracle

2013-09-18 11:02:07

细粒度审计简称FGA
 
细粒度审计基于内容监视数据访问,可以审计SELECT和DML语句。
用DBMS_FGA包管理,可以一定一些策略,审计事件触发程序执行。
数据库审计并没有记录操作语句,使用FGA审计可以捕获执行了什么SQL语句。
和基于值的审计不同,FGA审计不使用触发器,它的开销和数据库审计开销差不多,对系统性能影响较小。
FGA审计自动关注语句级别,一条SELECT语句查询上千条记录,只有1条审计记录。

FGA策略
定义审计标准和审计活动。使用DBMS_FGA.ADD_POLICY创建。
审计条件中包含department_id=10的select语句。
dbms_fga.add_policy (
object_schema => 'hr',
object_name => 'employees',
policy_name => 'audit_emps_salary',
audit_condition=> 'department_id=10',
audit_column => 'salary',
handler_schema => 'secure',
handler_module => 'log_emps_salary',
enable => TRUE,
statement_types=> 'select' );
 
audit_column字段定义只有当SELECT语句中会访问到包含该字段的行时才审计,如果忽略该设置,只有当department_id=10条件时才审计。
audit_condition和audit_column都设置时,当select语句访问了条件为audit_condition的设置,包含audit_column字段时才会审计。
例如:
以下2条语句都会审计:
SELECT count(*)
FROM hr.employees
WHERE department_id = 10
AND salary > v_salary;
 
SELECT salary
FROM hr.employees;
 
以下这条语句不审计,但如果没有设置audit_column,该语句会审计。
SELECT last_name
FROM hr.employees
WHERE department_id = 10;
 
handler设置审计事件发生时执行的程序,secure.log_emps_salary。
需要先建立好secure.log_emps_salary过程
该过程例子如:
create or replace procedure secure.log_emps_salary (schema_name varchar2,table_name varchar2, policy varchar2)
is
begin
执行内容
end;
/
 
这里需要注意的是,如果在执行内容中进行insert记录到其它表类似这样的操作,最后不要加commit,这样会导致ORA-600 [4412]错误,这是由于Bug号:6407682引起的。
*在10.2.0.4中修复
 
FGA审计的相关数据字典视图:
DBA_FGA_AUDIT_TRAIL     记录所有的审计事件,FGA审计主要检查该表。
ALL_AUDIT_POLICIES      当前用户可以访问的所有对象的FGA审计策略
DBA_AUDIT_POLICIES      数据库的FGA审计策略
USER_AUDIT_POLICIES     当前用户对象的FGA审计策略
 

DBMS_FGA的包包含以下子过程:
ADD_POLICY       创建一个新的策略
DROP_POLICY      删除一个策略
ENABLE_POLICY    激活一个策略
DISABLE_POLICY   禁用一个策略
 

后3个子过程内只包含object_schema,object_name,policy_name三个参数。

阅读(494) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~