对于Oracle数据库的审计,我们一般都会认为一般不能开审计啊,一旦开启了会对oracle数据库的性能产生巨大影响。所以针对oracle自身的数据库审计的策略几乎很少有人提起。今天我就测试一下细致化的审计策略是否对数据库的操作审计有效。
首先我们先看一下Oracle默认安装后审计策略设置是怎样的。
图1
由图可知默认情况下,审计策略是关闭的,而且审计记录存储的模式也未选择。所以默认情况下,某用户对某表做了某操作都是不做任何记录的。
这里先补充说明一下audit_sys_operations 值只有TRUE和FALSE两个之分。
但是audit_trail值有如下情况:
(1)audit_trail=’DB’ 表示把审计日志记录到数据库sys.audit$表中。
(2)audit_trail=’DB,extended’ 在DB选项基础上,在audit$表中还增加了SQLBIND和SQLTEXT两个clob栏位,用来存储SQLBIND和SQLTEXT信息。
(3) audit_trail=‘OS’ 审计结果存放在操作系统的审计信息中,若是windows 平台,audit trail会记录在windows的事件管理器中,若是linux/unix平台则会记录在audit_file_dest参数指定文件中。
(4)audit_trail=‘xml’审计结果存放在XML中, 并包含XML文件可以由数据库以外的工具方便地处理,过滤出有用的事件,与其它系统中的审计日志组合,并格式化HTML显示,操作系统文件提供比SYS.AUD$表更强大的安全性,特别是在希望阻止数据库管理员查看或修改审计跟踪的情况下,即使关闭数据库实例,仍然可以继续使用保存在数据库外的审计日志。用以下代码确定写入审计文件的目录: audit_file_dest='directorypath' 。注意,directorypath这不是一个目录对象,而是操作系统目录的实际路径名。
(5) audit_trail=‘xml,extended’,存储为xml,并包含SQLBIND和SQLTEXT信息。
audit_trail是static参数,每次修改后需要重新启动数据库才能生效。
此实验我们设置audit_trail值为DB,把审计日志记录到数据库sys.audit$表中。
SQL > alter system set audit_sys_operations=TRUE scope=spfile ;
SQL > alter system set audit_trail=DB scope=spfile ;
然后重启数据库: startup force
如图2
由图可知审计配置已开启。
接下来我们建立细致的审计策略。
Sql>Execute dbms_fga.add_policy(object_schema=>'scott',object_name=>‘dept',policy_name=>'chk_dept',statement_types=>'insert,update,delete');
(命令是建立针对scott账户对dept表进行insert、update、delete操作进行审计的策略)
接下来我们切换scott账户,执行上述操作。
Sql> insert into dept(deptno,dname,loc) values(70,’tec’,’beijing’);
此处我们只测试针对insert操作的审计。
向dept表中插入一个编号为70,地址为beijing的tec部门。
然后去查看是否对产生审计日志。
Sql> select t.timestamp,t.sql_text from sys.dba_fga_audit_trail t;
如图3:
由图可知产生了审计日志。
如果为了节约磁盘空间,提高数据库性能。可以选择关闭审计策略。
Sql>Execute dbms_fga.drop_policy(object_schema=>'scott',object_name=>‘dept',policy_name=>'chk_dept');
接下来我们插入一下代码,查看是否还能产生审计记录。
Sql> insert into dept(deptno,dname,loc) values(80,’tec’,’shanghai’);
如图4
有图可知:新操作并未被审计。
由此可知:要做到审计要有两个条件:1.修改audit_sys_operations 和audit_trail 审计参数值(此处可理解为审计进程)。2.建立针对细致的审计策略。
关闭审计功能,只要关闭以上两个条件之一即可。
默认审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间有足够的空间存放审计信息。若SYSTEM表空间没有足够的空间存放审计信息或者为了不影响系统的性能保护SYSTEM表空间,可以将审计结果表从system表空间里移动到别的表空间上.
可以通过以下命令查看具体表空间剩余大小:
select sum(bytes)/1024/1024 as free_space , tablespace_name from dba_free_space group by tablespace_name ;
如图 5
由图可知;SYSTEM表空间明显不足,那就迁移审计表空间到SYSAUX表中。
如图6
继续插入内容:
Sql> insert into dept(deptno,dname,loc) values(90,’tec’,’guangzhou’);
查看是否还能产生审计记录:
如图7
由图可知:改变审计表空间后,审计记录不受影响。