查看审计功能是否开启:
SQL> show parameter audit
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /data/oracle/admin/orcl/adump
audit_sys_operations boolean FALSE
audit_syslog_level string
audit_trail string OS
和审计相关的两个参数:
audit_sys_operations
:
默认为 false
,当设置为true时,所有sys用户(包括以sysdba, sysoper身份登录的用户)的操作都会被记录,audit trail
不会写在aud$
表中,这个很好理解,如果数据库还未启动aud$不可用,那么像conn /as sysdba这样的连接信息,只能记录在其它地方。如果是 linux/unix
平台会记录在 audit_file_dest
参数指定的文件中。
SQL> show parameter audit_sys_operation
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_sys_operations boolean FALSE
audit_trail
:
NONE
:是默认值,不做审计;
DB
:将audit trail 记录在数据库的审计相关表中,如 aud$
,审计的结果只有连接信息;
DB,Extended
:这样审计结果里面除了连接信息还包含了当时执行的具体语句;
OS
:将audit trail 记录在操作系统文件中,文件名由 audit_file_dest
参数指定;
XML
:10g里新增的。
SQL> show parameter audit_trail
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string OS
修改参数,打开审计 sys
用户的行为,审计记录记录到操作系统文件中:
SQL> alter system set audit_sys_operations=TRUE scope=spfile;
SQL> alter system set audit_trail=OS scope=spfile;
SQL> shutdown immediate
SQL> startup
注:这两个参数是 static 参数,需要重新启动数据库才能生效。
audit_syslog_level
这个参数和 syslog
配合使用,可以转发审计记录到本地其他目录或者远程审计服务器。
在 CentOS
中,使用 rsyslog
代替 syslog
,r
意思是 Rocket-fast
,突出一个快。
配置 audit_syslog_level
为 local0.info
:
SQL> alter system set audit_syslog_level='local0.info' scope=spfile;
SQL> shutdown immediate;
SQL> startup;
SQL> show parameter audit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /data/oracle/admin/orcl/adump
audit_sys_operations boolean FALSE
audit_syslog_level string LOCAL0.INFO
audit_trail string OS
local0.info
是啥意思,这个是rsyslog
日志配置的两个维度,local0
是facility
这个维度,有local0-local7
可选;info
是severity
这个维度,这个比较好理解,就是日志等级,后续过滤日志时可以使用这些维度去过滤。
配置 /etc/rsyslog.conf
# 审计记录保存到本地文件,我们之前设置的 audit_syslog_level 为 `local0.info`, 那就过滤到特定文件中
local0.info /var/log/oracle_audit.log
# 或转发到远程审计服务器。@是使用 `UDP` 协议,@@是使用 `TCP` 协议
local0.info @140.0.1.108
# 找到这一行加上 `local0.none`,意思是不要把 oracle 日志写入 message 文件中
*.info;mail.none;cron.none;local0.none /var/log/message
重启 rsyslog
$ systemctl restart rsyslog
# sqlplus / as sysdba 时就会有数据了
$ tail -f /var/log/oracle_audit.log
网友评论