oracle12c的c,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;

/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值