Oracle12.2c统一审计(unified auditing)六问

Oracle12.2c统一审计(unified auditing)六问

概述

      统一审计体系是Oracle在12c推出的新的日志体系。12.1和12.2虽然都属于该体系,但是12.1与12.2版本相比,明显给人一种半成品的感觉。包括基表,删除行为等方面存在较大差异,有兴趣的可以去了解一下,本文主要以12.2讲述。

1. 什么是统一审计?

2. 如何检查统一审计是否开启?

3. 审计数据落盘策略是什么?

4. 如何将操作系统上的审计数据写入数据库统一审计文件中?

5. 删除审计的两种方法?

6. 统一审计生产实战配置?

 

 

什么是统一审计?

审计是指监控和记录用户对数据库执行所有成功或失败的操作。

而统一审计( UNIFIED_AUDIT_TRAIL )是 Oracle 在 12c 版本推出的一种全新的审计体系。在新的体系下, Oracle 提供了更精细化的管理,并且将所有的审计记录按照统一的格式写入到 AUDSYS schema 下,可以通过 UNIFIED_AUDIT_TRAIL 视图查看。默认地,审计记录会被存放在 SYSAUX 表空间下。当然, Oracle 也建议将审计数据从 SYSAUX 中剥离出来放到新的表空间下,这一功能可以通过 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION 包实现。

 

统一审计的相关权限?

除了 SYS 用户外,只有被赋予 AUDIT_ADMIN 或 AUDIT_VIEWER 的用户才能看到 UNIFIED_AUDIT_TRAIL 数据字典视图。如果用户只需要查询 UNIFIED_AUDIT_TRAIL ,但是不需要创建审计策略 (audit policy) ,那么只需要赋予 AUDIT_VIEWER role 就可以了。

 

如何检查统一审计是否开启?

SQL> SELECT VALUE FROM V$OPTION WHERE   PARAMETER = ‘Unified Auditing‘;

 

VALUE

----------------------------------------------------------------

FALSE

TRUE: 代表完全统一审计开启;

FALSE :代表传统审计和统一审计的混合模式。

 

什么是完全统一审计模式 (Pure unified auditing) 和混合审计模式 (Mixed Mode Auditing) ?

完全统一审计模式,顾名思义,就是摒弃了之前的传统审计模式。

禁用统一审计方法 , 以单机为例:

shutdown

cd $ORACLE_HOME/rdbms/lib

make -f ins_rdbms.mk uniaud_off ioracle

startup

 

混合审计模式,只要开启了统一审计策略,就会形成统一审计和传统审计并存的局面,此时就是混合审计模式。默认建库时会启用 ORA_SECURECONFIG ,一个统一审计策略,这也就意味着默认建库时,就是混合审计模式。

ORA_SECURECONFIG 详情如下:

CREATE AUDIT POLICY ORA_SECURECONFIG

 PRIVILEGES ALTER ANY TABLE, CREATE ANY   TABLE, DROP ANY TABLE,

            CREATE ANY PROCEDURE, DROP ANY   PROCEDURE, ALTER ANY PROCEDURE,

            GRANT ANY PRIVILEGE, GRANT ANY   OBJECT PRIVILEGE, GRANT ANY ROLE,

            AUDIT SYSTEM, CREATE EXTERNAL   JOB, CREATE ANY JOB,

            CREATE ANY LIBRARY,

            EXEMPT ACCESS POLICY,

            CREATE USER, DROP USER,

            ALTER DATABASE, ALTER SYSTEM,

            CREATE PUBLIC SYNONYM, DROP   PUBLIC SYNONYM,

            CREATE SQL TRANSLATION PROFILE,   CREATE ANY SQL TRANSLATION PROFILE,

            DROP ANY SQL TRANSLATION PROFILE,   ALTER ANY SQL TRANSLATION PROFILE,

            TRANSLATE ANY SQL,

            EXEMPT REDACTION POLICY, 

            PURGE DBA_RECYCLEBIN, LOGMINING,

            ADMINISTER KEY MANAGEMENT

 ACTIONS      ALTER USER, CREATE ROLE, ALTER ROLE, DROP ROLE,

            SET ROLE, CREATE PROFILE, ALTER   PROFILE,

            DROP PROFILE, CREATE DATABASE   LINK,

            ALTER DATABASE LINK, DROP   DATABASE LINK,

            CREATE DIRECTORY, DROP DIRECTORY,

            CREATE PLUGGABLE DATABASE, 

            DROP PLUGGABLE DATABASE,

            ALTER PLUGGABLE DATABASE,

            EXECUTE ON DBMS_RLS;

 

 

审计数据落盘策略是什么?

审计数据写入数据文件有两种方式:

1. immediate-write mode 立即写

2. queued-write mode 队列写

立即写是将产生的审计数据马上写入硬盘,这样可以保证不丢失审计数据,但是对系统系统会有些许影响。

队列写是先将审计数据写入 SGA ,而不是直接写入数据文件,根据一定的策略再将审计数据写入数据文件。一般有两种策略:

l   时间策略:每隔三秒钟,视系统繁忙程度,也可能三秒钟了也没有写入。由隐含参数 _unified_audit_flush_interval 控制。

l   空间策略:存放在 SGA 中的审计数据容量达到 85% 。该区域默认是 1M ,由参数 unified_audit_sga_queue_size 控制,比例由隐含参数 _unified_audit_flush_threshold 控制

SQL> col name for a30;

SQL> col value for a10;

SQL> select * from

    2  (select

    3  x.ksppinm name,

    4  y.ksppstvl value,

    5  y.ksppstdf isdefault,

    6    decode(bitand(y.ksppstvf,7),1,‘MODIFIED‘,4,‘SYSTEM_MOD‘,‘FALSE‘)   ismod,

    7    decode(bitand(y.ksppstvf,2),2,‘TRUE‘,‘FALSE‘) isadj

    8  from

    9  sys.x$ksppi x,

 10    sys.x$ksppcv y

 11    where

 12    x.inst_id = userenv(‘Instance‘) and

 13    y.inst_id = userenv(‘Instance‘) and

 14    x.indx = y.indx

 15    order by

 16    translate(x.ksppinm, ‘ _‘, ‘ ‘)) T where T.name like   ‘%unified_audit%‘;

 

NAME                           VALUE      ISDEFAULT ISMOD      ISADJ

------------------------------ ----------   --------- ---------- -----

_unified_audit_flush_interval  3            TRUE      FALSE      FALSE

_unified_audit_flush_threshold 85         TRUE      FALSE      FALSE

_unified_audit_policy_disabled FALSE      TRUE      FALSE      FALSE

unified_audit_sga_queue_size   1048576      TRUE      FALSE      FALSE

 

当前落盘方式

SQL> SELECT PARAMETER_VALUE

    2  FROM   DBA_AUDIT_MGMT_CONFIG_PARAMS

    3  WHERE PARAMETER_NAME = ‘AUDIT   WRITE MODE‘;

 

PARAMETER_VALUE

-----------------------------------------------------------------

QUEUED WRITE MODE

 

修改为 immediate-write mode

BEGIN

 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE);

END;

/

 

修改为

BEGIN

 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY(

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE,

    DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE);

END;

/

 

队列写模式下如何手动 flush 审计数据?

 

 

手动刷新当前实例,适用于单机和 rac 单实例

EXEC   DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;

 

EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(DBMS_AUDIT_MGMT.FLUSH_CURRENT_INSTANCE);

 

 

Flush RAC 所有实例

EXEC   DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(DBMS_AUDIT_MGMT.FLUSH_ALL_INSTANCES);

 

 

   

 

对于多租户环境

当前 PDB

BEGIN   

 DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(

    CONTAINER  =>   DBMS_AUDIT_MGMT.CONTAINER_CURRENT);

END;

/

 

 

所有的 PDB 环境

BEGIN   

 DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(

    CONTAINER  =>   DBMS_AUDIT_MGMT.CONTAINER_ALL);

END;

/

 

 

如何将操作系统上的审计数据写入数据库统一审计文件中?

当数据库 mount 状态,或者 read only ,或者关闭时, Oracle 会将审计数据存放在操作系统的 $ORACLE_BASE/audit/$ORACLE_SID 目录下。

查看当前操作系统下

oracle@bd-dev-mingshuo-183:/opt/app/oracle/audit/mingdb/70A2182C94E1412DE053B7D91FAC647A$ll

total 32

-rw------- 1 oracle oinstall 30720 Jul 10   16:57 ora_audit_0786.bin

 

登入数据库执行

EXEC DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES;

 

命令完成之后,操作系统那个文件就消失了。

 

每个 PDB 会有一个同名的 uuid 目录,如果要将 pdb 的数据导入数据库,那么需要在 pdb 中执行上述命令。

 

 

删除审计的两种方法?

1. 自动清理任务

设置清理时间点

BEGIN

    DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(

     AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

     LAST_ARCHIVE_TIME    =>  ‘12-OCT-2013 06:30:00.00‘,

     RAC_INSTANCE_NUMBER  =>  1,

     CONTAINER            =>   DBMS_AUDIT_MGMT.CONTAINER_CURRENT);

END;

/

AUDIT_TRAIL_TYPE :指定审计数据类型

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED :统一审计数据

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD : AUD$ 表

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD : FGA_LOG$ 表

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS :操作系统上 .aud 结尾的文件

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML : XML 文件

LAST_ARCHIVE_TIME :指定时间,设置后该时间可以从 DBA_AUDIT_MGMT_LAST_ARCH_TS 中查出,设置时间点的意义在于,会清理这个时间点之前的归档过的数据。

RAC_INSTANCE_NUMBER : RAC 数据库相关参数。单实例不需要设置。默认值是 null 。因为 RAC 数据库也只有一个 AUD$ 表和 FGA_LOG$ 表

,那么即使是 RAC 数据库,对应的审计类型 DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD 和 DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD ,那么也不用设置这个值。

CONTAINER :适用于多租户环境

l   DBMS_AUDIT_MGMT.CONTAINER_CURRENT :指定当前 PDB

l   DBMS_AUDIT_MGMT.CONTAINER_ALL :所有 PDB

 

当上述设置完成后,就可以用 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL 包清理设置的时间点之前的审计数据。

BEGIN

DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(

     audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

     use_last_arch_timestamp => TRUE);

END;

/

 

 

创建清理 job

BEGIN

    DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (

     AUDIT_TRAIL_TYPE              => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

     AUDIT_TRAIL_PURGE_INTERVAL    => 12,

     AUDIT_TRAIL_PURGE_NAME        => ‘Audit_Trail_PJ‘,

     USE_LAST_ARCH_TIMESTAMP       => TRUE,

     CONTAINER                     => DBMS_AUDIT_MGMT.CONTAINER_CURRENT);

END;

/

 

 

AUDIT_TRAIL_TYPE: 指定审计数据类型

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED :统一审计数据

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD :针对 AUD$ 表

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD :针对 FGA_LOG$ 表

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD :针对 AUD$ 表和 FGA_LOG$ 表

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS :操作系统上 .aud 结尾的文件

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML : XML 文件

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES :操作系统上 .aud 结尾的文件和 XML 文件

l   DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL :上述所有类型的审计数据

AUDIT_TRAIL_PURGE_INTERVAL : job 每隔多久就运行一次,单位是小时。如果后面想要更改这个值,那么可以用 DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL 包。

USE_LAST_ARCH_TIMESTAMP :清理数据的时间选项

l   TRUE: 清理截止到上次归档的时间点

l   FLASE: 删除所有的数据

CONTAINER :多租户环境适用

l   DBMS_AUDIT_MGMT.CONTAINER_CURRENT : PDB 级别

l   DBMS_AUDIT_MGMT.CONTAINER_ALL : CDB 和 PDB 级别

 

 

设置好 job 后,启动

BEGIN

 DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS(

    AUDIT_TRAIL_PURGE_NAME        => ‘Audit_Trail_PJ‘,

    AUDIT_TRAIL_STATUS_VALUE      => DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE);

END;

/

AUDIT_TRAIL_PURGE_NAME : purge job 策略的名字,就是上面 CREATE_PURGE_JOB 里指定的。

AUDIT_TRAIL_STATUS_VALUE :

l   DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE :开启

l   DBMS_AUDIT_MGMT.PURGE_JOB_DISABLE :停止

 

 

修改 job 运行间隔

BEGIN

 DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL(

    AUDIT_TRAIL_PURGE_NAME         => ‘Audit_Trail_PJ‘,

    AUDIT_TRAIL_INTERVAL_VALUE     => 24);

END;

/

 

 

删除清理 job

BEGIN

 DBMS_AUDIT_MGMT.DROP_PURGE_JOB(

    AUDIT_TRAIL_PURGE_NAME  =>   ‘Audit_Trail_PJ‘);

END;

/

 

 

 

 

2. 手动清理审计

BEGIN

    DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(

     AUDIT_TRAIL_TYPE             =>    DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

     USE_LAST_ARCH_TIMESTAMP    =>  TRUE,

     CONTAINER                    =>    DBMS_AUDIT_MGMT.CONTAINER_CURRENT );

END;

/

 

各参数含义同上。

 

 

统一审计生产实战配置?

为了防止审计数据过多,需要定期对审计数据进行清理。

 

移动审计表空间

BEGIN

    DBMS_AUDIT_MGMT.set_audit_trail_location(

      audit_trail_type           =>   DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,

      audit_trail_location_value => ‘TBS_MING‘);

END;

/

 

设置 purge job

BEGIN

    DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (

     AUDIT_TRAIL_TYPE              => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,

     AUDIT_TRAIL_PURGE_INTERVAL    => 24,

     AUDIT_TRAIL_PURGE_NAME        => ‘Unified_Audit_Trail_PURGEJOB‘,

     USE_LAST_ARCH_TIMESTAMP       => TRUE);

END;

/

 

上面的 job 在运行时,要根据 SET_LAST_ARCHIVE_TIMESTAMP 的时间,下面的 job 可以手动刷新这个时间,不然上面的 job 最多只运行一次。

BEGIN

    DBMS_SCHEDULER.create_job (

      job_name        => ‘audit_last_archive_time‘,

      job_type        =>   ‘PLSQL_BLOCK‘,

      job_action      => ‘BEGIN

                         DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED,   TRUNC(SYSTIMESTAMP)-60);

                        END;‘,

      start_date      =>   SYSTIMESTAMP,

      repeat_interval => ‘freq=daily; byhour=0; byminute=0; bysecond=0;‘,

      end_date        => NULL,

      enabled         => TRUE,

      comments        =>   ‘Automatically set audit last archive time.‘);

END;

/

 

 

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/31480688/viewspace-2221638/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/31480688/viewspace-2221638/

Oracle12.2c统一审计(unified auditing)六问

上一篇:MySQL -- 数据库操作(创建、删除、修改、查看、选择)


下一篇:DataX安装使用实现MySQL到MySQL数据同步