在应用程序中一张基础配置信息表,保存着一些字典信息,键值时根据需要由应用程序按序增加的。这类需求用在主键字段值管理上。现在发现这样一个问题,该字典表会新插入相同的键,导致应用取键值时出现多条。
我们如何来解决这个问题?能想到的有两点。第一,设置该字典表的键字段为唯一约束;第二,启用审计功能,找出是什么应用程序插入了相同名称的记录。
前者治标,后者治本,
我们既要治标,又要治本。因此,我们设置审计功能用于解决这个问题。
(miki西游 @mikixiyou 文档:原文链接: http://mikixiyou.iteye.com/blog/1554501
)
1
、如何启用审计?
修改数据库的初始化参数audit_trail
,从none
修改为你需要的值。
它的可选项有很多,如下所示:
AUDIT_TRAIL = { none | os | db | db,extended | xml | xml,extended }
我们选择db
值作为该参数值。使得审计功能处于打开状态,将审计记录保存在数据库sys.aud$
表中。
修改初始化参数文件spfile
中的此参数配置值
ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE sid='*';
注意,这个参数需要数据库实例重启之后才能生效。
2
、审计有哪些功能
可以审计数据库对象的DML
和DDL
操作,以及查询、执行和一些系统事件如登录和退出。
如下所示:
DDL (CREATE, ALTER & DROP of objects)
DML (INSERT UPDATE, DELETE)
SELECT
EXECUTE
SYSTEM EVENTS (LOGON, LOGOFF etc)
每个功能还有选项,如在每个会话还是每个访问中审计,是成功或不成功时审计。
完整的audit
的语法如下:
AUDIT
{ sql_statement_clause | schema_object_clause | NETWORK }
[ BY { SESSION | ACCESS } ]
[ WHENEVER [ NOT ] SUCCESSFUL ] ;
3
、如何审计某表的数据插入操作
现在的问题是找出什么应用向表插入了记录。在应用程序的逻辑上,这个表的数据只会更新,不会插入。
因此,在审计功能打开后,使用这个下列命令审计某表的插入操作。
audit insert on table_name by access;
执行成功后,此表上每一次插入操作都会被记录在sys.aud$
表中。
4
、如何查看审计结果
可以查询dba_audit_trail
系统视图,该视图显示就是sys.aud$
表保存的审计结果。这个表的存储空间是system
,如果你需要大量长期审计某些操作,请注意维护这张表。
一般维护方法有两个,定期执行truncate
操作和将表的存储表空间移植到一个新建的独立表空间上。
5
、如何取消审计
使用noaudit
代替audit
命令符就可,
如noaudit insert on table_name by access;
详细的操作方法和说明可以参考下列文档:
http://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_4007.htm
这是oracle
的官方文档,10.2
版本的,很通用,e
文
http://mikixiyou.iteye.com/blog/1547353
这是mikixiyou
写的审计方案文档,稍微详细,简体中文
您也可以去google
,类似参考资料很多。
6
、最后,如何审计表中的部分记录?
实现这个功能的方法称为细粒度审计。这是oracle
在普通审计基础上的一个扩展。它将记录结果保存在FGA_LOG$
中,注意不再是aud$
表了。
细粒度审计(Fine Grained Auditing also FGA
),
通过一个包DBMS_FGA
来实现。
这个包有四个存储过程,分别是ADD_POLICY
,DROP_POLICY
,ENABLE_POLICY
和DISABLE_POLICY
。
BEGIN
DBMS_FGA.add_policy(
object_schema
=> 'MIKIXIYOU',
object_name
=> 'EMP',
policy_name
=> 'SAL_AUDIT',
audit_condition => 'SAL > 10000',
audit_column
=> 'SAL',
statement_types => 'SELECT,INSERT,UPDATE,DELETE');
END;
如果emp
表中sal
字段值大于10000
的操作如查询、插入、更新、删除执行了,就会记录到fga_log$
表中。
BEGIN
DBMS_FGA.drop_policy(
object_schema
=> 'MIKIXIYOU',
object_name
=> 'EMP',
policy_name
=> 'SAL_AUDIT');
END;
使用drop_policy
清理掉该审计策略。
细粒度审计在一个安全检测时非常有用,我曾经用过它在电子商务系统中找到黑客攻击的源头,在HIS
系统中找到针对药贩子需要的敏感药品的查询。
分享到:
相关推荐
"oracle数据库导出表结构到WORD文档"是一个实用的操作,它能够帮助我们生成包含所有表定义、字段信息、主键、外键等的详细报告。通过这个工具,我们可以快速地将Oracle中的数据库对象信息整理成Word文档,方便打印、...
Oracle数据库是全球广泛使用的大型关系型数据库管理...通过深入学习和实践这本《Oracle数据库操作手册》,无论是初级DBA还是经验丰富的开发者,都能提升对Oracle数据库的理解和运用能力,有效应对各种数据库管理挑战。
本篇文章将深入探讨Oracle数据库的核心概念、特点、主要组件以及一些关键操作。 1. **核心概念** - **SQL**:结构化查询语言,是用于管理关系数据库的标准语言,Oracle数据库支持SQL的多种扩展。 - **表空间**:...
Oracle数据库是全球广泛使用的大型关系型数据库管理系统之一,其强大的功能和稳定性使其在企业级应用中占据了重要地位。本文将详细解析Oracle数据库的体系结构,帮助读者深入理解其内部工作原理。 Oracle数据库的...
Oracle数据库审计功能的安全审计获取技术是确保数据库系统安全性和合规性的重要手段。Oracle数据库提供了强大的审计功能,可以跟踪和记录数据库的活动,以便于监控潜在的安全威胁、合规性问题以及性能瓶颈。本文将...
这份"Oracle数据库资料大全"将详细解读以上各个方面,帮助读者深入理解Oracle数据库的原理、操作和最佳实践,无论你是初学者还是资深DBA,都能从中受益。通过阅读并实践其中的内容,你将能够熟练地驾驭这个强大的...
Oracle数据库操作可视化程序是一款基于Java开发的工具,它为用户提供了一种直观的方式来管理和操作Oracle数据库。这个程序的主要目的是简化数据库的交互过程,使得数据库管理更加便捷,尤其适合那些不熟悉SQL命令行...
Oracle数据库审计是一项重要的安全措施,用于捕捉和记录发生在数据库中的各种活动,从而帮助管理员监控访问行为、确保数据安全并满足合规性要求。根据不同的需求,Oracle提供了几种不同的审计方法,包括标准数据库...
Oracle数据库作为业界广泛使用的数据库系统,其表结构的管理和对比是数据库管理员日常工作中不可或缺的部分。本文将详细介绍一个基于Oracle数据库的生产和测试数据库表结构对比工具,帮助你理解其工作原理和应用价值...
在这个“Abp项目模板使用Oracle数据库”的场景中,开发者已经将Abp框架与Oracle 11g数据库集成,以便利用Oracle的强大功能来存储和管理应用程序的数据。Abp.Zero是Abp框架的一个子模块,主要关注多层架构中的基础...
Oracle审计功能是数据库管理系统中的一种安全机制,它允许系统管理员监控和记录用户的数据库操作,以确保数据的安全性和合规性。审计功能可以详细追踪并记录特定的数据库活动,这对于故障排查、安全审计和合规性检查...
在Oracle数据库管理中,开启Audit(审计)是一项重要的安全措施,用于跟踪和记录用户活动、权限使用情况以及系统操作,以增强安全性并满足合规性要求。本文将深入探讨如何在Oracle环境中配置和使用Audit功能,包括...
3. **数据管理**:Oracle数据库中,数据存储在表空间中,表空间由数据文件组成。用户需要理解数据文件、重做日志文件、控制文件的概念和作用。此外,还需要了解如何创建、删除和管理表、索引、视图、序列等数据库...
Oracle 数据库安全配置...Oracle 数据库安全配置基线涵盖了账号安全、口令安全、认证控制、日记审计、其余配置和连续改良等多个方面,旨在指导系统管理人员或安全检查人员进行 Oracle 数据库的安全合规性检查和配置。
Oracle数据库是全球广泛使用的大型关系型数据库管理系统,其在企业级数据管理中扮演着至关重要的角色。本"Oracle数据库学习宝典"旨在帮助你全面掌握Oracle数据库的核心概念和技术,包括视图、存储过程、索引、触发器...
标题“oracle数据库解密工具”暗示了我们讨论的主题,即一种能帮助用户解析和理解Oracle数据库中加密或编译后的存储过程的软件工具。这类工具通常能够将二进制形式的PL/SQL代码还原成人类可读的文本格式,以便于分析...
首先,手册可能涵盖了Oracle数据库的基础概念,如数据库的体系结构,包括表空间、数据文件、控制文件、重做日志文件等组成部分,以及它们在数据库运行中的作用。这些基础知识对于理解数据库的工作原理至关重要。 ...
Oracle数据库是全球最广泛使用的...通过分析和实践这些实际案例,你可以更好地将理论知识应用于实际操作中,提升对Oracle数据库的理解和应用能力。记得不断练习和实验,理论结合实践,才能真正掌握Oracle数据库的精髓。
Oracle数据库管理系统是全球最广泛使用的数据库系统之一,尤其在大型企业和金融机构中。本文将深入探讨在Unix和Linux环境下如何有效地管理和维护Oracle数据库。 一、Oracle数据库基础 Oracle数据库是一种关系型...
1. **Oracle数据库体系结构**:培训可能会介绍Oracle数据库的基础架构,包括数据库实例、数据文件、控制文件、重做日志文件、参数文件等核心组件,以及它们在数据库操作中的作用。 2. **SQL语言**:Oracle支持标准...