我们在操作数据库的时候,知道SYS用户的权限是最大的干什么事很方便,同时带来的问题就是非常危险,没有人可以束缚住。因此我们有时需要对SYS用户进行审计
SYS@LEO1>show parameter audit
NAME TYPE VALUE
----------------------------------------------- ------------------------------
audit_file_dest string /u02/app/oracle/admin/LEO1/adump
audit_sys_operations boolean FALSE默认SYS用户审计是关闭的,这个参数是开启审计SYS用户所有SQL语句
audit_syslog_level string默认是关闭的,这个参数指出SYS用户审计日志的存放位置
audit_trail string DB
SYS@LEO1>alter system setaudit_sys_operations=true scope=spfile; 打开SYS用户审计
System altered.
SYS@LEO1>alter system setaudit_syslog_level='user.notice' scope=spfile; 用户日志
System altered.
SYS@LEO1>startup force 重启数据库使静态参数生效
ORACLE instance started.
Total System Global Area 471830528 bytes
Fixed Size 2214456 bytes
Variable Size 285214152 bytes
Database Buffers 176160768 bytes
Redo Buffers 8241152 bytes
Database mounted.
Database opened.
SYS@LEO1>show parameter audit
NAME TYPE VALUE
----------------------------------------------- ------------------------------
audit_file_dest string /u02/app/oracle/admin/LEO1/adump
audit_sys_operations boolean TRUE审计启动
audit_syslog_level string USER.NOTICE
audit_trail string DB
设置sys用户审计日志输出位置,Linux 中syslog.conf文件配置了各种类型日志的输出位置和消息源
我们只需要将Oracle日志输出配置信息添加到该文件中就可以了
[root@leonarding1 log]# vi /etc/syslog.conf
添加如下信息
# About Oracle SysLog
user.notice /var/log/oracle_dbms
添加完之后,我们还要重新加载一下配置信息,syslog.conf文件生效
[root@leonarding1 log]# ps -ef | grepsyslogd
root 2385 1 0 Jun14 ? 00:00:01 syslogd -m 0
root 29740 29502 0 17:25 pts/1 00:00:00 grep syslogd
[root@leonarding1 log]# kill -HUP 2385 重新加载
Ok,操作系统的配置内容完成了。
下面我们来演示一下SYS用户的审计
SYS@LEO1>create table test as select *from dba_objects; 我们创建一个表
Table created.
SYS@LEO1>drop table test purge; 再删除一个表
Table dropped.
好了,SYS用户操作做完了,我们来看看oracle_dbms审计日志中有没有抓取到SQL语句
[root@leonarding1 log]# cat oracle_dbms
Jun 15 18:08:40 leonarding1 OracleAudit[29903]: LENGTH : '199' ACTION :[46] 'create tabletest as select * from dba_objects' DATABASE USER:[1] '/' PRIVILEGE :[6]'SYSDBA' CLIENT USER:[6] 'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0'DBID:[10] '1692458681'
Jun 15 18:08:49 leonarding1 OracleAudit[29903]: LENGTH : '174' ACTION :[21] 'drop tabletest purge'DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[6]'oracle' CLIENT TERMINAL:[5] 'pts/3' STATUS:[1] '0' DBID:[10] '1692458681'
Good 创建表test和删除表test的命令都抓取到了,例如startup shutdown connect等操作都是可以抓取到的。
小结:通过上面的测试实例,我们了解到了对数据库管理员的审计也逐渐成为信息安全中的重要一项,这样可以对管理员人员进行监督,权限限制,提高数据库安全级别,完善安全管理制度。