[20260923]避免oracle audit sys operations记录到messages文件.txt
--//别人的抱怨,就是/var/log/message记录太多oracle sys用户执行的命令,其实在我看来主要对方不熟悉linux操作系统。
--//不过还是仔细看一下是否可以将oracle sys操作记录的相关信息移动到单独的文件。
1.环境:
SYS@book> @ ver2
==============================
PORT_STRING : x86_64/Linux 2.4.xx
VERSION : 21.0.0.0.0
BANNER : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
BANNER_FULL : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
BANNER_LEGACY : Oracle Database 21c Enterprise Edition Release 21.0.0.0.0 - Production
CON_ID : 0
PL/SQL procedure successfully completed.
SYS@book> show parameter audit
PARAMETER_NAME TYPE VALUE
------------------------------ -------- ----------------------------------
audit_file_dest string /u01/app/oracle/admin/book/adump
audit_sys_operations boolean TRUE
audit_syslog_level string LOCAL0.INFO
audit_trail string DB
unified_audit_common_systemlog string LOCAL2.INFO
unified_audit_systemlog string LOCAL1.INFO
# grep -i "local[012].info" /etc/rsyslog.conf
local0.info /var/log/oracle_audit.log
local1.info /var/log/oracle_unified_audit.log
local2.info /var/log/oracle_unified_audit_common.log
--//简单说明:要修改配置的机器数据库oracle 11g,缺省audit_sys_operations=false,实际上12c以后audit_sys_operations=true。
--//其他参数audit_syslog_level,unified_audit_common_systemlog,unified_audit_systemlog为空.
--//在这样的情况在sys下执行的任何命令在在参数audit_file_dest指定的目录都有记录,如果你执行rman之类操作,就可以发现会写入
--//许多内容,缺点文集分散,出现问题查询不方便,而且长时间运行建立许多小文件,占用大量磁盘空间,不利于使用logrotate管理.
--//如果修改audit_sys_operations=TRUE,基本不在写入audit_file_dest指定的目录,还是存在少量的情况,也许手工启动数据库的情况.
--//大部分信息写入/var/log/message,oracle_audit.log(注:配置audit_syslog_level=LOCAL0.INFO)
# cd /var/log
# ls -l messages oracle_audit.log
-rw-------. 1 root root 1867462 2026-09-23 15:39:50 messages
-rw-------. 1 root root 6549775 2026-09-23 15:33:13 oracle_audit.log
--//如果简单执行select sysdate from dual ;命令,在messages,oracle_audit.log都能找到相关,等于写了2份记录。
# tail -1 messages | sed -n "s/:/:\n/gp"
Sep 23 15:
44:
58 centos9 oracle_3009_boo[3009]:
Oracle Audit[3009]:
LENGTH :
'273' ACTION :
[25] 'select sysdate from dual ' DATABASE USER:
[1] '/' PRIVILEGE :
[6] 'SYSDBA' CLIENT USER:
[6] 'oracle' CLIENT TERMINAL:
[5] 'pts/7' STATUS:
[1] '0' DBID:
[10] '1677313217' SESSIONID:
[10] '4294967295' USERHOST:
[7] 'centos9' CLIENT ADDRESS:
[0] '' ACTION NUMBER:
[1] '3'
# tail -1 oracle_audit.log | sed -n "s/:/:\n/gp"
Sep 23 15:
44:
58 centos9 oracle_3009_boo[3009]:
Oracle Audit[3009]:
LENGTH :
'273' ACTION :
[25] 'select sysdate from dual ' DATABASE USER:
[1] '/' PRIVILEGE :
[6] 'SYSDBA' CLIENT USER:
[6] 'oracle' CLIENT TERMINAL:
[5] 'pts/7' STATUS:
[1] '0' DBID:
[10] '1677313217' SESSIONID:
[10] '4294967295' USERHOST:
[7] 'centos9' CLIENT ADDRESS:
[0] '' ACTION NUMBER:
[1] '3'
--//如果是生产系统,确实会存在大量oracle操作信息写入messages的情况。
2.如何实现呢?
--//修改/etc/rsyslog.conf,找到下划线那行,增加;local0.none;local1.none;local2.none如下内容。
# grep local0 /etc/rsyslog.conf
*.info;mail.none;authpriv.none;cron.none;local0.none;local1.none;local2.none action(type="omfile" file="/var/log/messages")
local0.info /var/log/oracle_audit.log
--//有点不理解,前面已经存在*.info,难道不包括local的相关配置吗,估计它不包括local的相关设置。
# systemctl restart rsyslog.service
--//再以sys登录执行一些命令,发现这些操作将不在记录在/var/log/messages里面。
3.补充logrotate相关配置:
# cat /etc/logrotate.d/oracle
/var/log/oracle_audit.log
/var/log/oracle_unified_audit.log
/var/log/oracle_unified_audit_common.log
{
size=20M
rotate 4
copytruncate
delaycompress
notifempty
}
--//自己根据也许需要调整参数比如size等参数,这样可以避免过度占用磁盘空间。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3183889/ ,如需转载,请注明出处,否则将追究法律责任。