【Unified Auditing】统一审计的进程架构体系

Unified Auditing的架构体系之—进程

统一审计的审计结果写入AUDSYS的模式

统一审计的审计结果写到数据文件中的方式主要有2种,队列写入模式(Queued-write mode)和立即写模式(Immediate-write mode)。关于这两种写的方式,我们可以参考下面的2个图。

图:

  **队列写入模式图**


立即写模式图
【Unified Auditing】统一审计的进程架构体系_第1张图片

立即写模式(Immediate-write mode):同步写入方法,统一审计的审计结果生成后,直接写入到AUDSYS schema 的审计表CLI_SWP$XXXX中。

队列写入模式(Queued-write mode):异步写入方法,统一审计的审计结果生成后,先把统一审计的审计结果保存在SGA中称为[SGA Queue]的队列中,然后周期性地从SGA Queue写入到AUDSYS schema 的审计表CLI_SWP$XXXX中(关于存储可以参看上一章的内容)。这种方式是数据库默认采用的设置。

立即写模式(Immediate-write mode)介绍

是一种同步写入的方法,这种模式和12c以前传统的审计结果写入磁盘方式一样,在生成审计结果的同时立即写入到磁盘中,所以优点是不会因为实例突然崩溃(Instance Crash)等导致审计数据的丢失。但另一方面,因为操作和审计磁盘写同时进行,会对数据库操作的性能产生一定的影响。

队列写入模式(Queued-write mode)介绍

如上图所示,统一审计的审计结果生成后,保存在SGA中称为[SGA Queue]的队列中,满足以下的任何一个条件时由后台进程GEN0负责写入到磁盘中。

  • 达到刷新时间间隔
  • 达到[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

参考:
Database Reference

UNIFIED_AUDIT_SGA_QUEUE_SIZE

对于统一审计(Unified Auditing)相关的设置参数,我们可以通过以下的方法查看。

例:

  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

由以上我们可以看到,

  • 后台进程GEN0的SGA Queue刷新间隔是由隐含参数_unified_audit_flush_interval来控制的,默认值为3秒。
  • [SGA Queue]队列的临界值是由隐含参数_unified_audit_flush_threshold来控制的,默认值为[SGA Queue]队列大小的85% 即:UNIFIED_AUDIT_SGA_QUEUE_SIZE * 85% 。

统一审计的审计结果保存在SGA中称为[SGA Queue]的队列中,然后周期性地从SGA Queue写入到AUDSYS schema 的审计表CLI_SWP$XXXX中,所以队列写入模式的优点是可以最大限度地减少由于审计对数据库操作性能的影响,但是由于是异步写入的方式,所以因为实例突然崩溃(Instance Crash)或者SHUTDOWN ABORT等情况下,有可能导致在SGA中的审计数据的丢失。

当然,除了由后台进程自动进行磁盘写入以外,也可以手动地调DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL
函数,把SGA Queue中的统一审计的审计数据刷新到AUDSYS schema 的审计表CLI_SWP$XXXX中。

例:

SQL> audit all;

Audit succeeded.

SQL> noaudit all;

Noaudit succeeded.

SQL>  EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;

PL/SQL procedure successfully completed.

统一审计的审计结果写入模式的设定

可以通过DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY函数,对数据库默认的写入模式进行修改。
需要注意的是,该设置仅对当前的CDB或PDB有效。

例:

SQL>---设定立即写模式(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>---确认写入模式
SQL> SELECT PARAMETER_VALUE
  2  FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
  3  WHERE PARAMETER_NAME = 'AUDIT WRITE MODE';

PARAMETER_VALUE
-------------------------------------------------
IMMEDIATE WRITE MODE

SQL>---设定队列写入模式(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>---确认写入模式
SQL> SELECT PARAMETER_VALUE
  2  FROM DBA_AUDIT_MGMT_CONFIG_PARAMS
  3  WHERE PARAMETER_NAME = 'AUDIT WRITE MODE';

PARAMETER_VALUE
-------------------------------------------------
QUEUED WRITE MODE

参考:
Database Security Guide

Setting the Write Mode for Unified Audit Trail Records

统一审计的审计数据无法写入时的处理

大家可能已经注意到队列写入模式图的右下角的出力部分。
这一部分是指当无法向数据库写入统一审计的审计数据时(如:数据库正在关闭或者变成了只读模式等),为了防止审计数据的丢失,Oracle会把审计数据写入到系统的如下文件中(nn为随机数值)。

$ORACLE_BASE/audit/$ORACLE_SID/ora_audit_nn.bin  

但数据库恢复到正常时,可以通过以下的Procedure调用,把这些系统文件再导入到AUDSYS schema 下的CLI_SWP$XXXX统一审计的存储表中。

EXEC DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES;

当这些系统文件导入到数据库中后,相应的文件会自动地被删除掉。

※另外,这里需要注意的是,当有大量存储文件时,利用Procedure向数据库导入统一审计结果,可能会影响到性能。

版权声明:本文为博主原创文章,转载请注明出处,谢谢。http://blog.csdn.net/lukeunique

你可能感兴趣的:(oracle,audit,Unified,统一审计,DBMS-AUDIT)