定期清理oracle审计日志

一、ORACLE 审计功能

审计是对选定的用户动作的监控和记录,通常用于:

u          审查可疑的活动。例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不成功地删除进行审计。

u          监视和收集关于指定数据库活动的数据。例如:DBA可收集哪些被修改、执行了多少次逻辑的I/O等统计数据。

ORACLE支持三种审计类型:

u          语句审计,对某种类型的SQL语句审计,不指定结构或对象。

u          特权审计,对执行相应动作的系统特权的使用审计。

u          对象审计,对一特殊模式对象上的指定语句的审计。

ORACLE所允许的审计选择限于下列方面:

u          审计语句的成功执行、不成功执行,或者其两者。

u          对每一用户会话审计语句执行一次或者对语句每次执行审计一次。

u          对全部用户或指定用户的活动的审计。

当数据库的审计是使能的,在语句执行阶段产生审计记录。审计记录包含有审计的操作、用户执行的操作、操作的日期和时间等信息。审计记录可存在数据字典表(称为审计记录)或操作系统审计记录中。数据库审计记录是在SYS模式的AUD$表中。

设置ORACLE审计

下列步骤可以设置ORACLE的审计功能:

 

1. 修改参数文件(init.ora,如果使用服务器参数文件使用alter system set = scope=spfile|both,详情参照1.1节中关于参数文件的介绍),设置 AUDIT_TRAIL参数,并且重启数据库。AUDIT_TRAIL的取值如下:

l         DB/TRUE:启动审计功能,并且把审计结果存放在数据库的 SYS.AUD$ 表中

l         OS:启动审计功能,并把审计结果存放在操作系统的审计信息中  

l         DB_EXTENDED:具有DB/TRUE的功能,另外填写AUD$SQLBINDSQLTEXT字段

l         NONE/FALSE:关闭审计功能 

         

2.如果设置 AUDIT_TRAIL = OS还需要修改参数AUDIT_FILE_DEST

    如果操作系统支持设置AUDIT_TRAIL=OS,文件会自动存放在AUDIT_FILE

_DEST所指定的目录下,并且文件名包含进程的PID

   比如: 

    AUDIT_FILE_DEST = $ORACLE_HOME/rdbms/audit  

    $ ls -l $ORACLE_HOME/rdbms/audit  

   -rw-rw----  1 ora92    dba        881 Mar 17 09:57 ora_13264.aud

    $ ps -ef|grep 13264

    ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)

    SQL> select spid, program, username from v$process;

    SPID PROGRAM                                 USERNAME

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

   ...

   13264        oracle@frhp11 (TNS V1-V3)                    ora92

    注意:WINDOWS NT不使用AUDIT_FILE_DEST参数,如果使用OS设置,那么审计信息会存放在WINDOWS NT的事件日志里。下面的章节会有专门的介绍。

   

3. 确认审计相关的表是否已经安装

 

   SQLPLUS> connect / AS SYSDBA 

   SQLPLUS> select * from sys.aud$;  -- 没有记录返回  

   SQLPLUS> select * from dba_audit_trail; -- 没有记录返回 

  如果做上述查询的时候发现表不存在,说明审计相关的表还没有安装,需要安装。

 

   SQLPLUS> connect / as sysdba 

   SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql  

  审计表安装在SYSTEM表空间。所以要确保SYSTEM表空间又足够的空间存放审计信息。

     

4. 关闭并重启数据库 

  

5. 设置所需要的审计信息

 下面是一个例子

   SQL> connect system/manager

   SQL> grant audit system to scott;     

   SQL> connect scott/tiger

   SQL> audit session;

 停止审计:

   SQL> noaudit session; 

二、清理审计日志

--进入审计日志目录:

cd $ORACLE_BASE/admin/$ORACLE_SID/adump

--删除3个月前的审计文件:

find ./ -type f -name "*.aud" -mtime +91|xargs rm -f

--一次清空所有审计文件

find ./ -type f -name "*.aud"|xargs rm-f

find ./ -mtime +7 -name "*.aud" -type f –delete

通常我们新装好一个数据库中查询审计开关的时候,可能会发现它的设置为DB。(预装设置,如果为其他表示被认为设置过)

SQL>show parameter audit_trail 
Name       TYPE     VALUE 
----------------------------------- 
audit_trail   string     DB

audit_trail=DB,代表的是,oracle将把每次审计跟踪记录在数据库的一张叫做AUD$的表中。

SQL>select owner,table_name,tablespace_name from dba_tables a where a.table_name ='AUD$'
OWNER TABLE_NAME TABLESPACE_NAME -------------------------------------------------------------- SYS AUD$ SYSTEM

而这张表所在的表空间,正式oracle数据库最重要的SYSTEM表空间。

 

由于这个表空间非常特殊:如果此时它正好被设置为自动扩展(AUT=YES)的话:

SQL>select a.tablespace_name,a.bytes,a.autoextensible from dba_data_files a where a.tablespace_name='SYSTEM'

TABLESPACE_NAME        BYTES              AUT
--------------------------------------------------------
SYSTEM                          2147473648    YES    

长此以往,SYSTEM表空间最终会因为过度肥胖把磁盘撑爆。

(反过来,如果SYSTEM表空间的autoextensible=NO,AUD$表就没地方写就会报错无法分配空间)

 

SO,有点数据库就会根据情况,将审计功能“关闭”:

1.设置审计参数关闭

SQL>alter system set audit_trail=none scope=spfile;

2.重启数据库

SQL>shutdown immediate;
SQL>startup;

这时候小伙伴以为高枕无忧了,其实,oracle早有准备,有一个叫强制审计的变态功能在等着你。

只要你敢

  • 用SYSDBA或者SYSOPER权限登录数据库
  • 敢startup
  • 敢shutdown

oracle就给你在$ORACLE_BASE/admin/$ORACLE_SID/adump 目录中记.aud的文件

所以,

开了DB功能,会同时将审计日志记在AUD$表中和操作系统aud文件中。

设置为NONE,仍然会而且毫无其他办法的将记录在操作系统aud文件中。

*数据库的表为:sys.aud$

*操作系统目录为:$ORACLE_BASE/admin/实例名/adump/

可通过SQL>show parameter audit 查询到)

 

是不是很变态?

所以这个目录长期不清理的话,会积压大量*.aud文件

长期大量不删除的话,会影响到操作系统inodes

 

所以,小伙伴们:

  • 如果为DB,记得定期清空aud$表
SQL>truncate table sys.aud$;
  • 如果你不想用DB功能,可以设置关闭
SQL>alter system set audit_trail=none scope=spfile;

注意,需要重启数据库

SQL>shutdown immediate;
SQL>startup;
  • 如果为NONE,记得清空aud文件或者配置crontab定时任务定时清空aud文件。

注意:不要直接删除adump目录,否则,你会sqlplus不了数据库。

当然/oracle/admin/orcl/adump\bdump 下产生的*.aud 的文件,*.trc的文件是可以直接删除的,如果你有权限的话;建议保留最近的。



展开阅读全文

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