从Oracle9i开始,就可以使用
DBMS_FGA可以对指定的表的SELECT语句进行审计,但是在9i中只能对select语句进行审计,在10g中可以实现对DML的审计功能。具体包的使用,可以参考官方文档,或者
Pinner的帖子 。这里只是记录我对该包进行SELECT语句的审计功能的一点体会。
l 在审计策略生效之前,必须对表进行分析,因为只有在CBO模式,
DBMS_FGA才能正确的工作,否则会产生意想不到的结果。
create table testfga(a number , b number ) ;
insert into testfga values(10 ,100) ;
insert into testfga values(20 ,200) ;
insert into testfga values(30 ,300) ;
commit ;
exec
dbms_fga.add_policy('SCOTT','TESTFGA','TESTPOLICY' , 'B>=20','B') ;
select * from testfga where b=10 ;
select session_id , timestamp , scn,sql_text from dba_fga_audit_trail ;
SESSION_ID TIMESTAMP SCN SQL_TEXT
---------- ----------- ---------- -------------------------
413 2004-10-3 1 334032 select * from testfga where b=10
检查审计结果,发现也有审计记录,其实此时不应该有审计记录的。
以sys身份联入,清除审计记录;再以scott连入;
如下执行
analyze table testfga compute statistics ;
select * from testfga where b<10 ;
select * from testfga where b>10 ;
select session_id , timestamp , scn,sql_text from dba_fga_audit_trail ;
SESSION_ID TIMESTAMP SCN SQL_TEXT
---------- ----------- ---------- ------------------------
413 2004-10-3 1 334981 select * from testfga where b>10
发现只有一条审计记录;这就验证前面的说法。其实根据
dbms_fga是根据select语句的返回记录判断是否进行设计的,即在返回记录总包含了符合指定的审计条件的记录,这执行的select语句被记录,否则不记录。
删除表中记录,重新执行select语句,检查审计记录,发现没有增加新的设计记录。
delete from testfga ;
select * from testfga where b>20 ;
select session_id , timestamp , scn,sql_text from dba_fga_audit_trail ;
SESSION_ID TIMESTAMP SCN SQL_TEXT
---------- ----------- ---------- ---------------------
413 2004-10-3 1 334981 select * from testfga where b>10
l
dbms_fga的设计并不仅仅记录对表的审计,也支持对基于该表的视图的审计,只要在select的返回结果包含了符合审计条件的记录,就会在审计表中添加相应的记录
create table test1 (c number , d number ) ;
insert into test1 values(10 , 10) ;
insert into test1 values(20 , 200) ;
insert into testfga values(10 ,100) ;
insert into testfga values(20 ,200) ;
insert into testfga values(30 ,300) ;
commit ;
analyze table test1 compute statistics ;
create or replace view fgaview (a,b,c) as select a.a , a.b ,b.d from testfga a , test1 b where a.a=b.c ;
select * from fgaview where b>20 ;
再检查dba_fga_audit_trail视图
select session_id , timestamp , scn,sql_text from dba_fga_audit_trail ;
SESSION_ID TIMESTAMP SCN SQL_TEXT
---------- ----------- ---------- ------------------------------------
413 2004-10-3 1 334981 select * from testfga where b>10
413 2004-10-3 2 335197 select * from fgaview where b>20
发现新增加一条记录,也就是说设置的审计条件对基于指定表的视图也是有效的。
l 在otn.
oracle.com上有关于
DBMS_FGA使用的详细介绍,下面是相应的链接。
现实中的细粒度审计 第一部分 现实中的细粒度审计 第二部分 现实中的细粒度审计 第三部分