Oracle 数据库专题 --------- 数据库安全性 ------ 数据库审计 XMOUG MEMBER 编写人: Empoli Liu 2010年 9 月 背景: 数据库审计,顾名思义,就是捕捉和存储发生在数据库内部的事件信息。本文档重点关注, 1:标准的数据库审计(Standard database au diting) 通过初始化参数AUDIT_TRAIL 控制实例级别的审计。 2:基于值的审计 (Valu e-based au diting) 它拓展了标准数据库审计,不仅捕捉审计事件,还捕捉那些被 insert,u pdate 和delete 的值。 基于值的审计通过触发器来实现。 3: 细粒度审计 (Fine-grained au diting) 它拓展了标准数据库审计,捕捉准确的SQL 语句。 接下来具体分析,每种审计都有相对应的介绍与实验。 操作系统版本:Redhat Enterprise Linu x 5.1 数据库版本: Oracle 10g 数据库审计介绍与实验一(标准的数据库审计) Au dit_trail 相当于是一个开关,默认不打开。 那么,如何打开呢?由于au dit_trail 参数值有多种,这里只列举两种。 如下是第一种,au dit_trail=db 标准数据库审计的数据放于基表aud$上,而aud$位于system 表空间上,众所周知,system表空间是存放数据字典表的地方,为避免因审计而较大的影响数据库的性能,应将此表移到其它表空间上。生产环境建议建一个单独的表空间存放审计表,本文将审计表移动到users表空间上,如下图 底层表是AUD$,那么如何知道上层该查询哪些表呢? Select * from dict d where d.table_name like ‘%AUD%’; 参数au dit_trail=db 后,就可以开始审计了,如下图 凡是有谁查询hr 用户的employ ees 表,就将它记录进au d$ 表。 而此时,我再以hr 用户登录,然后再次查询,发现底层 au d$表又记了一条记录, 而后,我又想,如果是同一个session 查多次会怎么样? 同一个hr 我让它查两次 发现,同一个session 查多次只会记录一次。 总结:默认情况下,同一session 查多次只会记录一次,不同session 不论用户是否相同,查几次就会记录几次。 继续往下思考 如果我要让它哪怕是同一个session,查一次就要它记录一次怎么做? OK,如下(默认是by session,所依此处改成by access) 再看,同一session 差了两次 数据也就跟着记录了两次 缺点:对数据库的影响极大,会造成最多50%性能的下降。 接下来,将au dit_trail 改为另一个值db_ex tended 审计都是大动作,所以都要经历一次数...