Oracle 11g与12c的审计详解

最近遇到一些脚本诱发的审计相关BUG,感受有必要从新梳理一下11g与12c的审计模式,因而根据官网修正了一下之前的一篇笔记这里发出来。html

1、审计功能的开启:python

SQL> show parameter audit
--主要有如下四个参数:
AUDIT_TRAIL(default:DB)
AUDIT_FILE_DEST(default:ORACLE_BASE/admin/ORACLE_SID/adump or ORACLE_HOME/rdbms/audit)
AUDIT_SYS_OPERATIONS(default:FALSE)
AUDIT_SYSLOG_LEVEL(no default)

audit_trail参数的值能够设置为如下几种(11G,12C适用):
sql

https://docs.oracle.com/cd/E11882_01/server.112/e40402/initparams017.htm#REFRN10006数据库

1. none --不开启
2. os --启用数据库审计,并将数据库审计记录定向到操做系统文件,存储目录为AUDIT_FILE_DEST
3. db --开启审计功能 启用数据库审计,并将数据库全部审计记录定向到数据库的SYS.AUD$表
5. db, extended --extened以前的空格必须有,启用数据库审计,并将数据库全部审计记录定向到数据库的SYS.AUD$表,另外填充SYS.AUD$表的SQLBIND列和SQLTEXT列
6. xml  --相似os,可是是将审计记录存放于XML格式的文件中
7. xml, extended --将审计记录存放于操做系统的xml文件中并填充sql_text和sql_bind信息
#此参数没法动态修改,所以须要重启数据库才能生效,示例:
alter system set AUDIT_TRAIL=db scope=spfile;
#对于db和db, extended两种审计模式,若是数据库是read-only模式的,那么数据库默认使用os审计模式,无视已有设置(由于不能向数据库表写入数据)。

AUDIT_SYS_OPERATIONS设置为true那么sys用户的操做也会被审计,但此值默认为false,此参数控制以sysdba和sysoper权限登录的用户以及sys用户自己的登录,审计记录必定会写在操做系统文件中(不管AUDIT_TRAIL参数如何设置)。安全

AUDIT_SYSLOG_LEVEL则表示当涉及到向操做系统文件写入审计记录时,直接写入到系统日志中而不是AUDIT_FILE_DEST(仅适用于类unix系统)。oracle

2、审计记录的存储
审计的两大分类:
  • 标准审计:主要记录一些涉及数据库安全性的SQL操做和权限变动等,官网列出的默认标准审计项包含以下操做(经过DBA_STMT_AUDIT_OPTS查看):
    --Oracle Database audits the following privileges by default:
    ALTER ANY PROCEDURE 	CREATE ANY LIBRARY 				DROP ANY TABLE
    ALTER ANY TABLE 		CREATE ANY PROCEDURE 			DROP PROFILE
    ALTER DATABASE 			CREATE ANY TABLE 				DROP USER
    ALTER PROFILE 			CREATE EXTERNAL JOB 			EXEMPT ACCESS POLICY
    ALTER SYSTEM 			CREATE PUBLIC DATABASE LINK 	GRANT ANY OBJECT PRIVILEGE
    ALTER USER 				CREATE SESSION 					GRANT ANY PRIVILEGE
    AUDIT SYSTEM 			CREATE USER 					GRANT ANY ROLE
    CREATE ANY JOB 			DROP ANY PROCEDURE 	 
    --Oracle Database audits the following SQL statement shortcuts by default:
    ROLE 					SYSTEM AUDIT 					PUBLIC SYNONYM
    DATABASE LINK 			PROFILE 						SYSTEM GRANT
    --此外经过audit命令指定的审计也是标准审计。
    
  • 精细审计:提供很是细粒度的审计,例如可使你审计针对某个表的某些字段在某一段时间内的某种DML操做,还能够限定客户端的IP等。

标准审计记录存储在SYS.AUD$表中,精细审计的记录存放于SYS.FGA_LOG$表中,分别能够经过DBA_AUDIT_TRAIL和DBA_FGA_AUDIT_TRAIL查看标准和精细审计的审计记录。spa

两种审计模式还有一个共同的视图能够看:DBA_COMMON_AUDIT_TRAIL,包含了标准+精细审计的记录。操作系统

truncate table aud$; --能够截断相关表,清理审计数据。

查看dba_common_audit_trail(包含标准和精细审计的记录)能够看到记录的主要字段包含:线程

SESSION_ID:并不是是真正的会话id,应该只是一个审计的会话ID标识,反正与当前会话的ID对不上。
记录生成时间
DB_USER、OS_USER、USERHOST
OS_PROCESS:服务端对应的server process的系统进程ID,若是带冒号:,冒号后边的是线程ID
RETURNCODE:服务端的返回错误码,好比密码验证失败就会显示1017的错误码,即ORA-1017:"invalid username/password; logon denied"
COMMENT_TEXT:若是是远程登陆还会包含客户端链接使用的TNS信息,包括使用的端口号
LOGOFF_TIME:会话登出时间
LOGOFF_LREAD、LOGOFF_PREAD、LOGOFF_LWRITE、LOGOFF_DLOCK:会话期间的逻辑读、物理读、物理写、死锁次数
ACTION:审计记录对应的操做号
STATEMENT_TYPE:审计记录对应的操做号表示的具体操做,也能够用过查询audit_actions视图来获取action与STATEMENT_TYPE的对应关系

提示:设计

12c中的unified审计记录不在AUD$表中,而是存储在AUDSYS schema下,能够经过AUDSYS.UNIFIED_AUDIT_TRAIL表查询,开启unified审计后传统的AUD$和dba_common_audit_trail等再也不包含任何审计记录。

3、关于精细审计(fine-grained auditing):

https://docs.oracle.com/cd/E11882_01/network.112/e36292/auditing.htm#DBSEG525

若是想要细粒度的审计某个schema下针对某个表的某些数据的操做记录,能够开启精细审计,这容许你设计很细粒度的策略,例如创造一个fga策略以下:

--查看相关包的用法:
desc DBMS_FGA;
BEGIN
 DBMS_FGA.ADD_POLICY(
 OBJECT_SCHEMA=>'HR',                   
 OBJECT_NAME =>'EMPLOYEES',                    
 POLICY_NAME =>'SAL_AUD',                    
 AUDIT_CONDITION =>'SALARY>3000',               
 AUDIT_COLUMN =>'SALARY',                                    
 ENABLE=>TRUE,                          
 STATEMENT_TYPES=>'SELECT,UPDATE');
END;
--在sqlplus 中直接/执行,或者做为存储过程在plsql中exec dbms_fga.add_policy(...........);

 查看精细审计策略:

DESC dba_audit_policies;
--查看已建立的精细审计策略
SELECT OBJECT_NAME,POLICY_NAME,ENABLED FROM DBA_AUDIT_POLICIES;

删除精细策略:

begin
dbms_fga.drop_policy (
object_schema=>'HR',
object_name=>'TEST',
policy_name=>'SAL_AUD');
end;
/

4、查看审计记录:

DBA_COMMON_AUDIT_TRAIL:https://docs.oracle.com/cd/B19306_01/server.102/b14237/statviews_3077.htm#REFRN23393

desc dba_common_audit_trail;
--示例:12c以前查看由于密码验证失败的审计记录:
select 
	EXTENDED_TIMESTAMP,DB_USER, OS_USER, USERHOST, COMMENT_TEXT
from dba_common_audit_trail
where 
	DB_USER = 'EASYITS'
   and RETURNCODE = 1017
   and EXTENDED_TIMESTAMP between
       to_timestamp('2019-04-18 21:30:00', 'YYYY-MM-DD HH24:MI:SS') and
       to_timestamp('2019-04-18 22:30:00', 'YYYY-MM-DD HH24:MI:SS');

 5、12c审计:

官网参考:

12c的传统审计(即11g里的标准审计和精细审计):

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/AUDIT-Traditional-Auditing.html#GUID-ADF45B07-547A-4096-8144-50241FA2D8DD

12c的unified审计:

https://docs.oracle.com/en/database/oracle/oracle-database/12.2/sqlrf/AUDIT-Unified-Auditing.html#GUID-B24D6874-4053-4E66-8238-6CD0C87E9DCA

12c中新引入的审计机制名为unified audit,你能够将其理解为一种更加轻便的精细审计。

咱们知道在12c以前想要使用精细审计就要用dbms_fga包去建立审计策略,想要使用标准审计就要用audit语句去审计特定的权限和SQL,相关的视图也很是多,这致使审计策略的管理很是混乱,audit的语法也很是的反人类。而12c的unified audit则对设置审计策略的方式作了统一和简化,只须要使用如下三种语句来设置审计策略就能够了:

而开启和关闭审计策略也极简,只须要使用简单的audit和noaudit语句:

audit policy <policy_name>;
noaudit policy <policy_name>;

能够看到咱们只要熟悉建立/修改审计策略的语法就能够了。

至于原有的标准审计和精细审计的建立模式,12c中依然保留,在混合审计模式下你依然可使用dbms包建立精细审计,audit命令也保留着建立标准审计的语法。

Unified审计模式的开启:

12c的Unified Auditing参数默认为false:

select parameter,value from v$option where parameter='Unified Auditing';

这种默认设置表示既支持12c以前的那种标准+精细的传统审计模式,也可使用unified审计模式,这种默认的模式也被称做混合审计模式(mixed)。

而若是开启unified audting,那么传统审计模式就会被禁用,audit_trail参数被忽略,AUD$和FGA_LOG$等相关表再也不新增任何审计记录,只能在AUDSYS.UNIFIED_AUDIT_TRAIL中看到unified审计的记录。

如何开启unified审计?

SQL> shutdown immediate;
ORACLE instance shut down.
SQL> host ( cd $ORACLE_HOME/rdbms/lib ; make -f ins_rdbms.mk uniaud_&2 ioracle ORACLE_HOME=$ORACLE_HOME )

12c混合审计模式下的审计表现:

咱们知道11g中,只要audit_trail不为none,那么数据库会默认审计一些操做,例如logon,logout和涉及数据库安全的操做等。而在12c中系统也预设了一些unified审计策略,能够经过AUDIT_UNIFIED_ENABLED_POLICIES视图查看已生效的审计策略,经过AUDIT_UNIFIED_POLICIES能够查看全部预设审计策略。

12c的混合模式下,对于11g中那些标准审计默认审计的审计项们也依然进行审计,只不过方式变了,变为了经过默认开启一些unified审计策略来进行这些默认审计(DBA_STMT_AUDIT_OPTS也再也不包含记录)。咱们能够看一下这些默认开启的审记策略:

select * from AUDIT_UNIFIED_ENABLED_POLICIES;
 

以上为12c中默认开启的审计策略,其中ORA_LOGON_FAILURES在12.1.0.2之后被从ORA_SECURECONFIG独立出来,而且只审计失败的登陆.

而从AUDIT_UNIFIED_POLICIES视图能够看出ORA_SECURECONFIG其实就包含了之前的那些默认标准审计项。

混合模式下不管是传统审计记录,仍是经过预设的unified auditing policy进行的默认审计,其审计记录在dba_common_audit_trail中均可以查看。

相关文章
相关标签/搜索