一、 统一审计作用
统一审计跟踪从各种来源捕获审计信息。通过统一审计,您可以从以下来源捕获审计记录:
- 来自统一审计策略和AUDIT设置中的审计记录(包括sys的审计记录)
- 来自DBMS_FGA的细粒度审计记录
- Oracle Database Real Application Security审计记录
- Oracle Recovery Manager审计记录
- Oracle Database Vault审计记录
- Oracle Label Security审计记录
- Oracle Data Mining记录
- Oracle Data Pump
- Oracle SQL * Loader直接加载
统一审计跟踪(unified audit trail)存放在SYSAUX表空间AUDSYS schema下的只读表中,审计信息通过UNIFIED_AUDIT_TRAIL视图以统一格式提供访问,在单实例和RAC中均可用。
当数据库可写时,审计记录将写入统一审计跟踪(DB中只读表)。如果数据库不可写,则审计记录将写入$ORACLE_BASE/audit/$ORACLE_SID目录
二、 统一审计优点
1. 启用统一审计后,不再依赖于先前版本中使用的初始化参数
- AUDIT_TRAIL
- AUDIT_FILE_DEST
- AUDIT_SYS_OPERATIONS
- AUDIT_SYSLOG_LEVEL
- UNIFIED_AUDIT_SGA_QUEUE_SIZE
2. 审计记录格式和存放位置统一
所有审计记录(包括对SYS的审计记录)都采用统一格式存放在同一位置,无须查看不同位置和查找不同格式的审计记录。
3. 提升了审计记录的管理和安全性
4. 整体审计性能大大提高。
默认情况下,审计记录会自动写入AUDSYS
架构中的内部关系表。
5. 简单的审计策略管理方式
可以创建命名审计策略,以审计第一节列出的受支持组件及SYS用户。此外,可以在策略中构建条件和排除项。
如果使用Oracle Audit Vault和Database Firewall,统一审计跟踪可以极大地方便收集审计数据,因为所有数据都来自同一位置。
三、 传统审计与统一审计的对比
12c之前的审计(传统审计)
不同层次审计策略配置方式不统一、存储格式及位置不统一、查看方式不统一
统一审计
整合各层次审计内容(①②层除外),以统一格式存放在相同位置,统一通过UNIFIED_AUDIT_TRAIL视图查看
四、混合模式审计
混合模式审计是12c开始新安装数据库中的默认审计方式,同时使用传统审计(12c之前的审计)和统一审计。
1. 混合模式审计架构图
2. 纯统一审计模式
3. 混合模式审计和纯统一审计之间的差异
模式 | 特征 | 启用 |
混合模式审核 | 既有传统审计,也有统一审计;可以使用统一审计工具和传统的审计工具 | 启用任何统一审计策略。无需重新启动数据库。 |
纯统一审计 | 只有统一审计;只能使用统一审计工具 | 以 |
4. 查看数据库审计模式
TRUE为纯统一审计,FALSE为使用混合模式审计
SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
5. 混合模式切换为纯统一审计
-
SQL> conn /as sysdba
-
SQL> SHUTDOWN IMMEDIATE
-
SQL> EXIT
-
-
$ lsnrctl stop listener_name
-
$
cd
$ORACLE_HOME/rdbms/lib
-
$ make -f ins_rdbms.mk uniaud_on ioracle ORACLE_HOME=
$ORACLE_HOME
-
$ lsnrctl start listener_name
-
-
SQL> conn /as sysdba
-
SQL> STARTUP
6. 关闭统一审计
-
SQL> conn /as sysdba
-
SQL> SHUTDOWN IMMEDIATE
-
SQL> EXIT
-
-
$ lsnrctl stop listener_name
-
$
cd
$ORACLE_HOME/rdbms/lib
-
$ make -f ins_rdbms.mk uniaud_off ioracle
-
$ lsnrctl start listener_name
-
-
SQL> conn /as sysdba
-
SQL> STARTUP
五、 统一审计策略管理
1. 谁可以进行审计
Oracle为执行审计的用户提供了两个角色:AUDIT_ADMIN
和AUDIT_VIEWER
。
- AUDIT_ADMIN:创建统一和细粒度的审计策略、查看审计数据及管理审计跟踪管理(读写权限)
- AUDIT_VIEWER:查看和分析审计数据(只读权限),需要此角色的用户通常是外部审计员。
2. 默认开启的统一审计策略
12c数据库中预先定义了一些审计策略,根据版本不同,默认开启的审计策略也略有不同。
可以通过audit_unified_enabled_policies视图进行查看默认开启的统一审计策略
-
SQL>
--12.1.0.2的默认审计策略
-
SQL>
select USER_NAME,POLICY_NAME,ENABLED_OPT,
SUCCESS,
FAILURE
from audit_unified_enabled_policies;
-
-
USER_NAME POLICY_NAME ENABLED_OPT SUCCES FAILUR
-
-------------------- -------------------- ---------------- ------ ------
-
ALL USERS ORA_SECURECONFIG BY YES YES
-
ALL USERS ORA_LOGON_FAILURES BY NO YES
-
-
SQL>
--12.1.0.1的默认审计策略
-
SQL>
select USER_NAME,POLICY_NAME,ENABLED_OPT,
SUCCESS,
FAILURE
from audit_unified_enabled_policies;
-
-
USER_NAME POLICY_NAME ENABLED_OPT SUCCES FAILUR
-
-------------------- -------------------- ---------------- ------ ------
-
ALL USERS ORA_SECURECONFIG BY YES YES
可以看到,不做任何配置的情况下
- 12.1.0.1中,默认开启了ORA_SECURECONFIG审计策略,数据库会根据这个审计策略
- 12.1.0.2中,默认开启了ORA_SECURECONFIG和ORA_LOGON_FAILURES审计策略
需要说明的是,ORA_SECURECONFIG审计策略在12.1.0.1和12.1.0.2的版本上的定义是不同的。
- 12.1.0.1中,ORA_SECURECONFIG审计策略包含了对所有LOGON和LOGOFF的审计。
- 12.1.0.2中,ORA_SECURECONFIG审计策略移除了对所有LOGON和LOGOFF的审计,而增加了一个新的审计策略ORA_LOGON_FAILURES,用于仅审计登陆失败的操作。这样更加方管理,也能改善因为大量LOGON和LOGOFF的审计对表空间的浪费。
ORA_SECURECONFIG审计策略详细参考
http://docs.oracle.com/database/121/DBSEG/audit_config.htm#CHDIGFHG
ORA_LOGON_FAILURES审计策略详细参考
http://docs.oracle.com/database/121/DBSEG/audit_config.htm#DBSEG703
禁用默认开启的统一审计策略
-
SQL>
--12.1.0.2的环境
-
SQL> noaudit policy ORA_SECURECONFIG;
-
Noaudit succeeded.
-
SQL> noaudit policy ORA_LOGON_FAILURES;
-
Noaudit succeeded.
-
-
SQL>
--12.1.0.1的环境
-
SQL> noaudit policy ORA_SECURECONFIG;
-
Noaudit succeeded.
六、 配置统一审计策略
使用 CREATE AUDIT POLICY 语句
https://docs.oracle.com/database/121/DBSEG/audit_config.htm#DBSEG357
-
CREATE
AUDIT
POLICY policy_name
-
{ {privilege_audit_clause [action_audit_clause ] [role_audit_clause ]}
-
| { action_audit_clause [role_audit_clause ] }
-
| { role_audit_clause }
-
}
-
[
WHEN audit_condition
EVALUATE PER {
STATEMENT|
SESSION|
INSTANCE}]
-
[
CONTAINER = {
CURRENT |
ALL}];
一个简单的例子
-
--创建审计策略,审计对表scott.emp的select操作
-
SQL>
create
audit
policy up1 actions
select
on scott.emp;
-
审计策略已创建。
-
-
--启用审计策略
-
SQL> audit policy up1;
-
审计已成功。
-
-
--查看审计策略
-
SQL>
select POLICY_NAME,AUDIT_OPTION_TYPE,OBJECT_NAME,COMMON
from AUDIT_UNIFIED_POLICIES
where POLICY_NAME =
upper(
'up1');
-
-
POLICY_NAME AUDIT_OPTION_TYPEOBJECT_NAME COMMON
-
-------------------- ------------------------------------ --------------- ------
-
UP1 OBJECT ACTIONEMP NO
-
-
--查看已启用的审计策略
-
SQL>
select USER_NAME,POLICY_NAME,ENABLED_OPT,
SUCCESS,
FAILURE
from AUDIT_UNIFIED_ENABLED_POLICIES;
-
-
USER_NAMEPOLICY_NAME ENABLED_OPT SUCCES FAILUR
-
-------------------- -------------------- ---------------- ------ ------
-
ALL USERSORA_SECURECONFIG BY YES YES
-
ALL USERSORA_LOGON_FAILURES BY NO YES
-
ALL USERSUP1 BY YES YES
-
-
--禁用审计策略
-
NOAUDIT POLICY UP1;
-
审计未成功。
-
-
--删除审计策略
-
SQL>
DROP
AUDIT
POLICY UP1;
-
审计策略已删除。
-
-
SQL>
select POLICY_NAME,AUDIT_OPTION_TYPE,OBJECT_NAME,COMMON
from AUDIT_UNIFIED_POLICIES
where POLICY_NAME =
upper(
'up1');
-
未选定行
在删除审计策略之前,必须禁用掉该审计策略,否则会报ORA-46361错误
-
SQL>
DROP
AUDIT
POLICY UP1;
-
DROP
AUDIT
POLICY UP1
-
*
-
第
1 行出现错误:
-
ORA
-46361: 当前已启用审计策略, 因此无法删除此策略。
七、 常用视图
AUDIT_UNIFIED_POLICIES - 记录DB内所有统一审计策略
AUDIT_UNIFIED_ENABLED_POLICIES - 记录DB内所有已启用的统一审计策略
UNIFIED_AUDIT_TRAIL - 记录所有统一审计结果
-
SQL> col OS_USERNAME format a15
-
SQL> col SQL_TEXT format a30
-
SQL> COL AUDIT_TYPE format a10
-
SQL> col ACTION_NAME format a10
-
SQL> col UNIFIED_AUDIT_POLICIES format a10
-
SQL>
select AUDIT_TYPE,OS_USERNAME,TERMINAL,ACTION_NAME,
-
2 SQL_TEXT,UNIFIED_AUDIT_POLICIES
-
3
from UNIFIED_AUDIT_TRAIL
where OBJECT_NAME=
'EMP';
-
-
AUDIT_TYPE OS_USERNAME TERMINAL ACTION_NAM SQL_TEXT UNIFIED_AU
-
---------- --------------- -------------------------------- ---------- --------------------
-
Standard XXXXX-CN\walt XXXX-CN
SELECT
SELECT
COUNT(*)
FROM scott.emp UP1
八、 统一审计审计结果写入模式
统一审计的审计结果写到数据文件中的方式主要有2种
- 立即写模式(Immediate-write mode)
- 队列写入模式(Queued-write mode)
1. 立即写模式
同步写入方法,审计结果生成后,直接写入到AUDSYS schema 的审计表CLI_SWP$XXXX中。
与12c之前的传统审计结果写入磁盘方式相同,在生成审计结果的同时立即写入到磁盘中。优点是不会因为实例突然崩溃等导致审计数据的丢失。但另一方面,因为操作和审计磁盘写同时进行,会对数据库操作的性能产生一定的影响。
2. 队列写入模式(默认)
异步写入方法,审计结果生成后,先保存在SGA中称为[SGA Queue]的队列中,满足以下任一条件时由后台进程GEN0写入到磁盘(AUDSYS schema 的审计表CLI_SWP$XXXX)
- 达到刷新时间间隔
- 达到[SGA Queue]队列的临界值
[SGA Queue]的大小由参数UNIFIED_AUDIT_SGA_QUEUE_SIZE确定,默认大小为1M,可设置的范围为1MB ~ 30 MB
-
SQL>
show parameter UNIFIED_AUDIT
-
-
NAME
TYPE
VALUE
-
------------------------------- --------- -----------
-
unified_audit_sga_queue_size
integer
1048576
查看统一审计相关参数
-
SQL> col Description format a26
-
SQL> col Parameter format a30
-
SQL>
select a.ksppinm
"Parameter",a.KSPPDESC
"Description",
-
2 b.ksppstvl
"Value"
-
3
from sys.x$ksppi a, sys.x$ksppcv b
-
4
where a.indx = b.indx
and a.ksppinm
like
'%unified_audit%';
-
-
Parameter Description Value
-
------------------------------ -------------------------- --------
-
_unified_audit_policy_disabled Disable Default Unified Au FALSE
-
dit Policies on DB
Create
-
-
unified_audit_sga_queue_size
Size
of Unified
audit SGA
1048576
-
Queue
-
-
_unified_audit_flush_threshold Unified
Audit SGA Queue Fl
85 ★
-
ush Threshold
-
-
_unified_audit_flush_interval Unified
Audit SGA Queue Fl
3 ★
-
ush
Interval
可以看到,
- SGA Queue自动刷新间隔由隐含参数_unified_audit_flush_interval控制,默认为3秒。
- SGA Queue自动刷新临界值由隐含参数_unified_audit_flush_threshold控制,默认为SGA Queue大小的85% 即:UNIFIED_AUDIT_SGA_QUEUE_SIZE * 85% 。
队列写入模式的优点是可以最大限度地减少由于审计对数据库操作性能的影响,但是由于是异步写入的方式,所以因为实例突然崩溃(Instance Crash)或者SHUTDOWN ABORT等情况下,有可能导致在SGA中的审计数据的丢失。
手动把SGA Queue中的统一审计结果刷到审计表CLI_SWP$XXXX中
SQL> EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL; PL/SQL procedure successfully completed.
3. 统一审计结果写入模式设定
通过DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY函数,对数据库默认的写入模式进行修改。需要注意的是,该设置仅对当前的CDB或PDB有效。
-
--设定立即写模式(Immediate-write mode)
-
SQL>
BEGIN
-
2 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(
-
3 DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
-
4 DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,
-
5 DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE);
-
6
END;
-
7 /
-
-
PL/SQL procedure successfully completed.
-
-
--确认写入模式
-
SQL>
SELECT PARAMETER_VALUE
-
2
FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
-
3
WHERE PARAMETER_NAME =
'AUDIT WRITE MODE';
-
-
PARAMETER_VALUE
-
-------------------------------------------------
-
IMMEDIATE WRITE MODE
-
--设定队列写入模式(Queued-write mode)
-
SQL>
BEGIN
-
2 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(
-
3 DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,
-
4 DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,
-
5 DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE);
-
6
END;
-
7 /
-
-
PL/SQL procedure successfully completed.
-
-
--确认写入模式
-
SQL>
SELECT PARAMETER_VALUE
-
2
FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
-
3
WHERE PARAMETER_NAME =
'AUDIT WRITE MODE';
-
-
PARAMETER_VALUE
-
-------------------------------------------------
-
QUEUED WRITE MODE
4. 统一审计结果无法写入时的处理
注意队列写入模式图的右下角的处理部分
正如文章最开始提到的,当无法向数据库写入统一审计结果时(如:数据库正在关闭或者变成了只读模式等),为了防止审计数据丢失,Oracle会把审计数据写入到 $ORACLE_BASE/audit/$ORACLE_SID/ora_audit_nn.bin文件中(nn为随机数值)。
当数据库恢复正常时,可以通过以下存储过程调用,把这些系统文件再导入到AUDSYS schema 下的CLI_SWP$XXXX统一审计的存储表中,导入后相应的文件会自动被删除
EXEC DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES;
※需要注意的是,当有大量存储文件时,利用Procedure向数据库导入统一审计结果,可能会影响DB性能。
参考
https://docs.oracle.com/database/121/DBSEG/auditing.htm#DBSEG1024
https://docs.oracle.com/database/121/DBSEG/audit_config.htm#DBSEG357
https://docs.oracle.com/database/121/DBSEG/audit_admin.htm#GUID-6C2F428C-E209-4626-8A5F-616CF0D31476
https://blog.csdn.net/lukeunique/article/details/49385853
https://blog.csdn.net/lukeunique/article/details/49531111