oracle审计维护

1、查询审计情况

SYS@prod1>select userid,count(1) from aud$ group by userid;

USERID                 COUNT(1)
------------------------------ ----------
HR                       5
SCOTT                    3
SYSTEM                   10
TEST1                    4
LBACSYS                  14
SYS@prod1>select owner,segment_name,bytes/1024/1024 mb from dba_segments where segment_name='AUD$';

OWNER                   SEGMENT_NAME                                         MB
------------------------------ --------------------------------------------------------------------------------- ----------
SYSTEM                   AUD$                                              .0625

SQL> select count(*) from AUD$;
  COUNT(*)
----------
        12
---查看最早一条审计记录的时间
SQL> select min(ntimestamp#) from aud$;
MIN(NTIMESTAMP#)
---------------------------------------------------------------------------
20-AUG-14 06.11.09.901253 AM

2、审计日志迁移

--从下面的查询中可以看出,当前的审计位于system表空间

col segment_name FOR a10
SELECT owner,segment_name,tablespace_name FROM dba_segments WHERE segment_name ='AUD$';
OWNER SEGMENT_NA TABLESPACE_NAME
------------------------------ ---------- ------------------------------ SYS AUD$ SYSTEM

---创建表空间用于存储审计日志

CREATE tablespace audit_data datafile '+DATA' SIZE 30G autoextend ON;

---10g以前版本迁移(需停库):

ALTER TABLE SYS.AUDIT$ MOVE TABLESPACE AUDIT_DATA;
ALTER TABLE SYS.AUDIT_ACTIONS MOVE TABLESPACE AUDIT_DATA;
ALTER TABLE SYS.AUD$ MOVE TABLESPACE AUDIT_DATA;
ALTER TABLE SYS.AUD$ MOVE LOB(SQLBIND) STORE AS SYS_IL0000000384C00040$$ (TABLESPACE AUDIT_DATA);
ALTER TABLE SYS.AUD$ MOVE LOB(SQLTEXT) STORE AS SYS_IL0000000384C00041$$ (TABLESPACE AUDIT_DATA);
ALTER INDEX SYS.I_AUDIT REBUILD ONLINE TABLESPACE AUDIT_DATA;
ALTER INDEX SYS.I_AUDIT_ACTIONS REBUILD ONLINE TABLESPACE AUDIT_DATA;

--可能修改值
select COLUMN_NAME,index_name from dba_lobs where owner='SYSTEM' and table_name='AUD$';
SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='AUD$';
SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='AUDIT$';
SELECT INDEX_NAME FROM DBA_INDEXES WHERE TABLE_NAME='AUDIT_ACTIONS';
手动迁移的时候,业务无法访问,同时导致system表空间数据文件出现碎片,无法回收,并且产生了大量的归档,50G大小的表aud$迁移耗时相当长,同时产生了巨量归档,平时一天三四十G的归档,当晚产生了300多G的归档

---11g以后版本

BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
audit_trail_location_value => 'AUDIT_DATA');
END;
/

 ---FGA_LOG$ 表移至此表空间中:

begin
dbms_audit_mgmt.set_audit_trail_location(
audit_trail_type => dbms_audit_mgmt.audit_trail_fga_std,
audit_trail_location_value => 'AUDIT_DATA');
end;
/

-- 查看审计数据字典配置信息
col PARAMETER_NAME FOR a30
col PARAMETER_VALUE FOR a15
col AUDIT_TRAIL FOR a20
SELECT PARAMETER_NAME, PARAMETER_VALUE, AUDIT_TRAIL FROM DBA_AUDIT_MGMT_CONFIG_PARAMS WHERE audit_trail = 'STANDARD AUDIT TRAIL';
PARAMETER_NAME PARAMETER_VALUE AUDIT_TRAIL
------------------------------ --------------- -------------------- DB AUDIT TABLESPACE AUDIT_DATA STANDARD AUDIT TRAIL DB AUDIT CLEAN BATCH SIZE 10000 STANDARD AUDIT TRAIL

3、审计日志清理

 ---10g以前版本

DELETE FROM SYS.AUD$;
delete from sys.aud$ where timestamp#<sysdate-100;
delete sys.aud$ where NTIMESTAMP#<trunc(sysdate,'HH')-90; DELETE FROM SYS.AUD$ WHERE obj$name
='EMP';
commit;
--OS和XML选项下进行手动删除审计文件
需要注意的是,如果 AUD$表过大,那么直接 TRUNCATE AUD$表,系统要立即释放大量的EXTENTS,会严重影响系统性能。可以通过如下 2 个步骤逐步释放 EXTENTS:

1 清空数据并且保留原来的 EXTENTS: TRUNCATE TABLE SYS.AUD$ REUSE STORAGE; 在这里,REUSE STORAGE 是 TRUNCATE 的一个参数,表示保持原来的存储不变。一般情况下,SQL 命令“TRUNCATE TABLE TABLE_NAME;”其实就是“TRUNCATE TABLE TABLE_NAME DROP STORAGE;”。DROP STORAGE 是 TRUNCATE TABLE 的默认参数。
2 逐步回缩 EXTENTS: ALTER TABLE SYS.AUD$ DEALLOCATE UNUSED KEEP 5000M; ALTER TABLE SYS.AUD$ DEALLOCATE UNUSED KEEP 2000M; …… ALTER TABLE SYS.AUD$ DEALLOCATE UNUSED KEEP 10M; 需要注意的是,在执行的时候,可以根据实际情况调整每次回缩空间的大小。

3、#收缩HVM,清理空间

alter table sys.aud$ enable row movement;
alter table sys.aud$ shrink space cascade;
alter table sys.aud$ disable row movement;

--11g以后版本迁移的最佳步骤具体步骤,应该如下:

#1.建议客户删除aud$,如果有需要,expdp导出保留,不然可能遇到以上问题   ---sys表空间不能用expdp导出
expdp USERID=\"/ as sysdba\" table=’SYS.AUD$’ log=expdp_aud_20190107.log dumpfile=expdp_aud_20190107.dmp

#删除aud$表
TRUNCATE TABLE AUD$;

#收缩HVM,清理空间
alter table sys.aud$ enable row movement;
alter table sys.aud$ shrink space cascade;
alter table sys.aud$ disable row movement;

#2.使用DBMS_AUDIT_MGMT迁移aud$表到sysaux,不影响业务,手动时业务无法访问
BEGIN
DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
audit_trail_location_value => 'SYSAUX');
END;
/

#3.初始化
BEGIN
sys.DBMS_AUDIT_MGMT.init_cleanup(
audit_trail_type => sys.DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
default_cleanup_interval => 7*24);
END;
/

#4.验证是否初始化
SET SERVEROUTPUT ON
BEGIN
IF DBMS_AUDIT_MGMT.is_cleanup_initialized(DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD) THEN
DBMS_OUTPUT.put_line('YES');
ELSE
DBMS_OUTPUT.put_line('NO');
END IF;
END;
/

#5.设置定时清理job,设定归档间隔
BEGIN
DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
last_archive_time => systimestamp-30, --保留最近30天审计日志
rac_instance_number => 1); --对于保存在DB中的审计或者单实例审计,rac_instance_number可忽视
END;
/

--查看设定的归档间隔
SQL> SELECT * FROM dba_audit_mgmt_last_arch_ts;


#6.创建定时清理job
BEGIN
DBMS_AUDIT_MGMT.CREATE_PURGE_JOB(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, --此次是假设审计日志保存在DB中。如果是保存在OS中,应该是audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS(12c默认audit_sys_operations为true,sys的审计会存放在audit_file_dest)
audit_trail_purge_interval => 7*24 /* hours */, --每24小时运行一次
audit_trail_purge_name => 'Purge_AUD$',
use_last_arch_timestamp => TRUE); --使用前面设置的last_archive_time保存策略,FALSE则为删除全部审计日志
END;
/

--通过调用DBMS_AUDIT_MGMT.clean_audit_trail进行手动清理审计日志
BEGIN
  DBMS_AUDIT_MGMT.clean_audit_trail(
   audit_trail_type        => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
   use_last_arch_timestamp => TRUE);
END;
/

-- 本次测试使用了job进行清理,注,上面的purge job 并非使用DBMS_SCHEDULER.CREATE_JOB创建
-- 执行job用于清理归档,通过观察,由于redo log size为50MB,切换较为频繁,花费了19分钟
-- 同时伴随有Checkpoint not complete等待事件,可见redo size过小

#7.运行定时清理任务
exec DBMS_SCHEDULER.RUN_JOB(job_name => 'SYS.Purge_AUD$');

---查询作业执行情况

select * from dba_audit_mgmt_clean_events;   ---delete_count不能为0

select * from DBA_AUDIT_MGMT_CLEANUP_JOBS;

---要显示审计线索清除过程的各种参数,例如,最大大小、默认表空间等等,您可以查询一个名为 DBA_AUDIT_MGMT_CONFIG_PARAMS 的视图。

select * from dba_audit_mgmt_config_params;

 

请注意参数 audit_trail_type 的变化。该参数因相关联的原因接受以下值:

参数

目的:删除:

dbms_audit_mgmt.audit_trail_aud_std

数据库中的常规 AUD$ 审计线索

dbms_audit_mgmt.audit_trail_fga_std

FGA_LOG$ 表,用于细粒度审计

dbms_audit_mgmt.audit_trail_db_std

常规审计线索和 FGA 审计线索

dbms_audit_mgmt.audit_trail_os

OS 文件审计线索

dbms_audit_mgmt.audit_trail_xml

XML 审计线索文件

dbms_audit_mgmt.audit_trail_files

OS 和 XML 审计线索

dbms_audit_mgmt.audit_trail_all

以上全部

 

 

参考网址:https://www.oracle.com/technetwork/cn/articles/sql/11g-security-094283-zhs.html

posted @ 2021-01-19 17:37  harrison辉  阅读(102)  评论(0)    收藏  举报