转-利用Oracle审计功能来监测试环境的变化
2024-09-30 00:40:18
http://blog.csdn.net/luowangjun/article/details/5627102
利用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)一一找到,如下所示:
最新文章
- Html中列表标签<;ul>;的使用
- C++学习笔记27:异常处理机制
- centos7安装docker并设置开机启动
- python分布式任务调度Celery
- iOS开发——高级技术&;签名机制
- 暴力枚举 UVA 725 Division
- Java之--Java基础知识
- 面试相关的技术问题---java基础
- yii2 访问控制
- inPolygonTest学习和C++实现
- java 多线程之卖票两种方式
- 使用make
- python的zipfile、tarfile模块
- this 指向问题, 三个例子
- Centos 下使用VLAN+Bridge 搭建KVM基础网络环境
- 质量能量等效的泛化--物理学定律方程与等效原理的对应关系 Generalization of Mass-Energy Equivalence--Corresponding Relations between Equations of Physical Laws and Equiva
- 课程一(Neural Networks and Deep Learning),第三周(Shallow neural networks)—— 2、Practice Questions
- ELK初探
- 开发openfire 消息拦截器插件PacketInterceptor
- 批量远程执行shell命令工具