这篇文章主要介绍“Oracle12.2c统一审计是什么”,在日常操作中,相信很多人在Oracle12.2c统一审计是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle12.2c统一审计是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
什么是统一审计?
审计是指监控和记录用户对数据库执行所有成功或失败的操作。
而统一审计(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; / |
到此,关于“Oracle12.2c统一审计是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!