最近因某企业莫名出现3次某重要数据采集表记录全部被修改为某个值的事情,通过LOGMINER工具分析出的日志结果,每个UPDATE都带有具体的ROWID,并且绑定变量也都替换了成了具体的数值,不大好和源程序中的语句进行匹配。
细粒度审计(FGA)功能摸索了下,9i这个版本虽然有此功能,但只能对SELECT语句进行审计,用处不大,不做具体测试。考察下10G和11G 两个版本,设置简单,而且最后的审计结果还算理想,有完整的SQL_TEXT,也有绑定变量的前值和后值,下面说下具体的操作过程:
在10G 11G上测试下细粒度查询的功能:
1首先登陆oracle后输入show parameter audit_trail来查看审计是否打开
Sqlplus /nolog
Conn / as sysdba;
SQL > show parameter audit_trail ;
返回结果:
NAME TYPE VALUE
udit_trail string NONE
NONE表示审计未打开。
打开审计功能:
alter system set audit_trail= DB,Extended;
DB,Extended选项在DB选项基础上,在audit$表中还增加了SQLBIND和SQLTEXT两个clob栏位,用来存储SQLBIND和SQLTEXT信息,即审计结果里面除了连接信息还包含了当时执行的具体语句以及绑定的变量信息。
2 重启数据库
Shutdown immediate;
Startup;
3 设置细粒度审计
--可以增加审计列和审计条件,对用户TEST的表T进行审计,操作类型包括INSERT, UPDATE, DELETE,SELECT,SELECT条件针对JHZTZ>=3,语句如下:
begin
dbms_fga.add_policy (
object_schema=>'TEST',
object_name=>'T',
policy_name=>'T _ACCESS',
statement_types=>'INSERT, UPDATE, DELETE,SELECT',--不加这个默认是SELECT?
audit_column => 'JHZTZ',
audit_condition => 'JHZTZ >= 3'
);
end;
/
--启用审计策略
begin
dbms_fga.enable_policy (
object_schema => 'TEST',
object_name => 'T',
policy_name => 'T _ACCESS',
enable => TRUE
);
end;
/
4 查询系统数据字典,看监控的结果:(fga_tmp001NEW.xls)
select * from dba_audit_trail ;
详细信息看附件图示
5 --删除审计策略
begin
dbms_fga.drop_policy (
object_schema => 'TEST',
object_name => 'T',
policy_name => 'TACCESS'
);
end;
/
6--停用审计策略
begin
dbms_fga.enable_policy (
object_schema => 'TEST',
object_name => 'T',
policy_name => 'T _ACCESS',
enable => FALSE
);
end;
/
要重新启用它,可使用同一函数,将参数 enable 设置为 TRUE即可。
7 更改审计的默认表空间:
默认审计表安装在SYSTEM表空间。我们看到数据量不小。所以要确保SYSTEM表空间有足够的空间存放审计信息。若SYSTEM表空间没有足够的空间存放审计信息或者为了不影响系统的性能保护SYSTEM表空间,可以将审计结果表从system表空间里移动到别的表空间上。下面是具体的操作过程(需要SYSDBA权限才能进行该操作):
在设置audit_trail=’DB,extended’的情况下:
SQL> alter table audit$ move tablespace users;
SQL> alter table audit$ move lob(sqlbind) store as(tablespace users)
SQL> alter table audit$ move lob(SQLTEXT) store as(tablespace users)
SQL> alter index i_audit rebuild tablespace users;
将审计结果表从system表空间里移动到users表空间。
可以通过以下命令查看具体表空间剩余大小:
select sum(bytes)/1024/1024 as free_space , tablespace_name from dba_free_space group by tablespace_name ;
(注意:若设置audit_trail=’DB’ 移动的步骤将更为简单:
SQL> alter table audit$ move tablespace users;
SQL> alter index i_audit rebuild tablespace users;
)
8 也可以对存储过程进行审计,用以下两个参数:
handler_schema 拥有数据过程的模式
handler_module 过程名称
后记:在 FGA 中,审计更加灵活 — 仅当访问某些列,当某个特定的条件为真时等等。这种多功能性在您需要控制线索的增长时非常方便。
在 FGA 中,SQL 赋值变量默认被捕获。在常规审计中,必须把初始化参数 audit_trail设为 db_extended,以启用这一功能。
权限差异:常规审计需要审计系统或语句权限;著名笔者刊www.zmbzk.comFGA 只需要 dbms_fga 程序包上的运行权限。
通过上面的比较,您将了解为什么可以证明 FGA 在某些情况下很有用。利用 Oracle Database 10g 中的增强的常规审计特性,一些以前认为不可能的任务 — 例如捕获赋值变量的值 — 变得十分容易。