ITPub博客

首页 > 数据库 > Oracle > dbms_fga的一点研究

dbms_fga的一点研究

原创 Oracle 作者:yaoronghui2005 时间:2009-10-13 10:37:56 0 删除 编辑
http://203.208.39.132/search?q=cache:6Kv_JkTFgpMJ:www.itpub.net/thread-272674-1-1.html+DBMS_FGA+oracle&cd=3&hl=zh-CN&ct=clnk&gl=cn&client=aff-360homepage&st_usg=ALhdy29VwR1wC9m2GSZLdWpshNfY1rb53A[@more@]
从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使用的详细介绍,下面是相应的链接。

现实中的细粒度审计 第一部分

现实中的细粒度审计 第二部分

现实中的细粒度审计 第三部分

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/450962/viewspace-1027802/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    153
  • 访问量
    176623