笨笨狗!~罗望军~的专栏

你有一条信息,我有一条信息,交换之后我们每人都有二条信息,知识共享,一起进步!...

利用oracle审计功能来监控测试数据库的变化

利用oracle审计功能来监测试环境的变化

         做过测试的人都应该会碰到这样的情况:测试发现的bug在开发机器上没有出现,显然这是环境差异的原因。相当多情况下,因为测试使用的数据库结构和开发使用的数据库结构不一致造成的。尤其是一些公司在提交测试版本的时候,注重应用程序的版本提交,往往忽略提交和程序匹配的数据库结构,在这种情况下,如果程序和数据库结构不匹配的话,系统稳定就怪了,就像windows没有对应的注册表一样,能稳定吗?

回到正题,如果采用oracle作为底层数据库的系统,如何避免这种情况呢?其实,Oracle的审计功能除了用于安全性检查之外,放到测试领域则有一个好处,就是监控测试数据库的变化情况。Oracle审计内容很丰富:包括语句审计、对象审计、细粒度审计(FGA),监控数据库环境的变化,只要用到语句审计和对象审计即可。

首先:需要检查数据库服务器是否开启了审计,采用show parameter aud命令。

 

Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> show parameter aud

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

audit_file_dest                      string      F:/APP/ADMINISTRATOR/ADMIN/ORC L/ADUMP

audit_sys_operations                 boolean     FALSE

audit_trail                          string       FALSE

如果audit_trail = FALSE或者none,则表明没有开启审计功能,需要开启审计功能,为了建立数据库环境修改的详细记录,需要将audit_trail=db_extended,这样可以在审计视图(dba_audit_trail)看到详细库结构修改(执行了什么样的SQL语句):

SQL> Alter system set audit_trail=db_extended scope=spfile

SQL> shutdown immediate //因为audit_trail是静态参数,所以需要重启oracle实例

SQL> startup open

 

然后设定要审计的用户和表,如果要审计某个用户修改数据库情况,输入如下语句:

SQL> audit all by test whenever successful  //意思是只要test用户改动数据库成功的地方,都可以审计到。

上面的all参数是代表审计大部分对象(表、视图、序列)增加、删除,无法对表结构的修改,所以还需要显示的指定表结构的修改。

SQL> audit alter table by test  by access whenever successful;

 

 

设定完毕,执行测试,如下:

SQL> create table test_table (id number ,name varchar2(20)) ;

表已创建。

SQL> alter table  test_table add(shool varchar2(20)) ;

表已更改。

SQL> alter table  test_table add(school varchar2(20)) ;

表已更改。

SQL> drop table test_table  ;

表已删除。

然后查询oracle审计视图(dba_audit_trail),可以看到数据库结构的详细变化情况,包括表的增加、修改、删除、什么时候结构修改、由那台机器修改都很清楚,如下所示:

 

 

 

如果测试系统中,如果有一些很重要的表(如:数据字典表、权限表、基础配置表等)的修改,会严重影响运行,这些测试环境的变化需要详细跟踪,则需要对重要的表对应启动记录级的审计,

SQL> audit insert,update ,delete on test.test_table  by access whenever successful ;

 

对重要表进行记录级的修改,如下所示:

 

 

 

 

对记录修改完毕后,这些修改变化可以在审计视图dba_audit_trail一一找到如下所示

 

 

 

 

阅读更多
个人分类: 质量管理
想对作者说点什么? 我来说一句

oracle审计

oracle audit

DBDoctor DBDoctor

2016-06-22 12:30:36

阅读数:7265

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭