Oracle审计功能
查看审计功能是否开启
1、登陆Oracle数据库
[kalami@kylin ~]$ sqlplus sys/root123 as sysdba;
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 8 09:52:33 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to an idle instance.
SQL>
或者
su - oracle
sqlplus "/as sysdba"
[kalami@kylin ~]$ su oracle
Password:
[oracle@kylin kalami]$ sqlplus "/as sysdba"
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 8 11:44:52 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
2、查询审计参数
SQL> show parameter audit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/oradb/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB
unified_audit_common_systemlog string
unified_audit_sga_queue_size integer 1048576
unified_audit_systemlog string
SQL>
3、审计参数说明
-
audit_sys_operations : 将
audit_sys_operations
设置成true
后,那么做为sysdba
或sysoper
连接数据库的用户所发布的每条语句都会被写入操作系统的审计中,从而能够给出DBA
所进行操作的完整记录。 -
如果是
windows
平台,audti trail
会记录在windows
的事件管理中,如果是linux/unix
平台则会记录在audit_file_dest
参数指定的文件中。audit_file_dest
参数指定的审计信息的目录中。 -
audit_trail :
None
是Oracle10g默认值,不做审计;Oracle11g默认值DB,将审计结果记录到aud$表中;audit_trail
参数含义如下:【db】:启用审计,并且把审计结果放到数据库的sys.aud$表中,审计结果只有连接信息; 【true】:表示开启; 【os】:启用审计,并且把审计结果存放在操作系统的数据信息中(若是windows 平台,audit trail会记录在windows的事件管理器中,若是linux/unix平台则会记录在audit_file_dest参数指定文件中; 【db_extended】:启用审计,把审计结果存放在数据库的sys.aud$表中,并且在clob列的sqlbind和sqltext字段记录额外的信息(与db大致相同,但审核结果包含了具有绑定变量的SQL语句); 【xml】:启用审计,以xml格式写所有的审计记录; 【extended】:启用审计,在审计跟踪中记录所有列,包括sqltext和sqlbing值; 【none/false】:表示不开启,禁用审计。
开启审计功能
以 sysdba/sysoper
角色登陆数据库。
[kalami@kylin ~]$ sqlplus sys/root123 as sysdba;
或者
[kalami@kylin ~]$ su - oracle
[oracle@kylin oracle]$ sqlplus "/as sysdba"
SQL> alter system set audit_sys_operations=TRUE scope=spfile;
SQL> alter system set audit_trail=db,extended scope=spfile;
重启实例:
SQL> shutdown immediate;
SQL> startup;
关闭审计功能
以 sysdba/sysoper
角色登陆数据库。
[kalami@kylin ~]$ sqlplus sys/root123 as sysdba;
或者
[kalami@kylin ~]$ su - oracle
[oracle@kylin oracle]$ sqlplus "/as sysdba"
SQL> conn /as sysdba;
SQL> alter system set audit_trail=none scope=spfile;
SQL> alter system set audit_sys_operations=FALSE scope=spfile;
重启实例:
SQL> shutdown immediate;
SQL> startup;
Oracle审计日志
查看审计参数
[oracle@kylin ~]$ whoami
oracle
[oracle@kylin ~]$
[oracle@kylin ~]$ sqlplus "/as sysdba"
SQL*Plus: Release 19.0.0.0.0 - Production on Thu Sep 8 14:05:20 2022
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> show parameter audit;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest string /u01/app/oracle/admin/oradb/adump
audit_sys_operations boolean TRUE
audit_syslog_level string
audit_trail string DB, EXTENDED
unified_audit_common_systemlog string
unified_audit_sga_queue_size integer 1048576
unified_audit_systemlog string
SQL>
audit_sys_operations
审计SYSDBA
的活动。默认值是false
。相关的审计信息不会记录在aud$
中,因为有可能此时数据库还未启动,只能记录在操作系统层面的文件中。默认为false
,不意味着没有审计信息,像conn / as sysdba
这样的操作仍然会被记录。audit_file_dest
参数指定的审计信息的文件夹。
将audit_sys_operations
设置成true
后,那么做为sysdba
或sysoper
连接数据库的用户所发布的每条语句都会被写入操作系统的审计中,从而能够给出DBA
所进行操作的完整记录。
查看对DBA的审计记录
进入到 audit_file_dest
指定的目录,然后查看相关审计记录文件。
root@kylin adump]# pwd
/u01/app/oracle/admin/oradb/adump
[root@kylin adump]#
[root@kylin adump]# ls
oradb_m002_30990_20220908140539016073458143.aud
oradb_ora_29196_20220908134033692428347545.aud
oradb_ora_30750_20220908135529174856587112.aud
oradb_ora_29081_20220908134004444235989131.aud
oradb_ora_30644_20220908135507944215277692.aud
[root@kylin adump]#
[root@kylin adump]# cat oradb_ora_30750_20220908135529174856587112.aud | grep -i action
ACTION :[7] 'CONNECT'
ACTION NUMBER:[3] '100'
ACTION :[19] 'ALTER DATABASE OPEN'
ACTION NUMBER:[2] '35'
ACTION :[22] 'select * from sys.aud$'
ACTION NUMBER:[1] '3'
[root@kylin adump]#
这个文件中记录着Oracle管理员的操作记录。
Oracle对特定用户的审计追踪
比如,对 testuser
进行审计追踪,详细记录 testuser
用户他登录的细节是什么,他改变了哪些对象,它们的原始值是什么,执行的SQL语句,执行了哪些过程/函数等。
1、首先,需要通过设置audit_trail
参数在数据库中启用审计
SQL> alter system set audit_trail='OS|DB|DB,EXTENDED|XML|XML, EXTENDED';
2、然后,添加审核内容
SQL> AUDIT ALL BY testuser BY ACCESS;
SQL> AUDIT SELECT TABLE, UPDATE TABLE, INSERT TABLE, DELETE TABLE BY username BY ACCESS;
SQL> AUDIT EXECUTE PROCEDURE BY testuser BY ACCESS;
3、重启Oracle实例
SQL> shutdown immediate;
SQL> startup;
查看审计日志
前提是 audit_trail=DB
类型。
查询目前的日志信息:select * FROM SYS.AUD$;
删除已有的审计信息:DELETE FROM SYS.AUD$;
或者快速删除表信息:truncate table SYS.AUD$;
查询特定字段:
select * from sys.aud$;
select USERID, USERHOST, TERMINAL, OBJ$CREATOR, NTIMESTAMP#, PROCESS#, SQLTEXT from sys.aud$;
select USERID, USERHOST, TERMINAL, OBJ$CREATOR, NTIMESTAMP#, PROCESS#, SQLTEXT from sys.aud$ where OBJ$CREATOR='DBUSER';