12c 에서 새로 나온 UNIFIED AUDIT 사용하면 기존 FGA 보다 편리하게 audit 기능을 사용할 수 있다.
UNIFIED AUDIT은 아래와 같이 다양한 소스로 부터 감사 정보를 수집할 수 있다.
Audit records (including
SYS
audit records) from unified audit policies andAUDIT
settingsFine-grained audit records from the
DBMS_FGA
PL/SQL packageOracle Database Real Application Security audit records
Oracle Recovery Manager audit records
Oracle Database Vault audit records
Oracle Label Security audit records
Oracle Data Mining records
Oracle Data Pump
Oracle SQL*Loader Direct Load
기본 저장 TBS가 SYSTEM으로 지정 되어 있으니 별도의 TBS를 생성하여 관리한다.
-- 감사 전용 테이블 스페이스 생성 CREATE TABLESPACE TBS_AUDIT DATAFILE SIZE 4G; col table_name for a20 SELECT table_name, tablespace_name FROM dba_tables WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name; TABLE_NAME TABLESPACE_NAME -------------------- ------------------------------ AUD$ SYSTEM FGA_LOG$ SYSTEM -- 감사 테이블 스페이스 SYSTEM -> TBS_AUDIT 변경 BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD, audit_trail_location_value => 'TBS_AUDIT'); END; / BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD, audit_trail_location_value => 'TBS_AUDIT'); END; / BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, audit_trail_location_value => 'TBS_AUDIT'); END; / col table_name for a20 SELECT table_name, tablespace_name FROM dba_tables WHERE table_name IN ('AUD$', 'FGA_LOG$') ORDER BY table_name; TABLE_NAME TABLESPACE_NAME -------------------- ------------------------------ AUD$ TBS_AUDIT FGA_LOG$ TBS_AUDIT COLUMN parameter_name FORMAT A30 COLUMN parameter_value FORMAT A20 COLUMN audit_trail FORMAT A20 SELECT * FROM dba_audit_mgmt_config_params; PARAMETER_NAME PARAMETER_VALUE AUDIT_TRAIL ------------------------------ -------------------- -------------------- DB AUDIT TABLESPACE TBS_AUDIT STANDARD AUDIT TRAIL DB AUDIT TABLESPACE TBS_AUDIT FGA AUDIT TRAIL DB AUDIT TABLESPACE TBS_AUDIT UNIFIED AUDIT TRAIL AUDIT FILE MAX SIZE 10000 OS AUDIT TRAIL AUDIT FILE MAX SIZE 10000 XML AUDIT TRAIL AUDIT FILE MAX AGE 5 OS AUDIT TRAIL AUDIT FILE MAX AGE 5 XML AUDIT TRAIL DB AUDIT CLEAN BATCH SIZE 10000 STANDARD AUDIT TRAIL DB AUDIT CLEAN BATCH SIZE 10000 FGA AUDIT TRAIL OS FILE CLEAN BATCH SIZE 1000 OS AUDIT TRAIL OS FILE CLEAN BATCH SIZE 1000 XML AUDIT TRAIL AUDIT WRITE MODE QUEUED WRITE MODE UNIFIED AUDIT TRAIL AUDIT FILE MAX SIZE 10000 UNIFIED AUDIT TRAIL AUDIT FILE MAX AGE 5 UNIFIED AUDIT TRAIL |
정책은 BIG, DW 스키마에 대하여 SELECT, INSERT, UPDATE, DELETE 가 성공했을 때 AUDIT 이 실행 되도록 설정 한다.
-- DI_ALL_ACTION_POL 을 정책 이름으로 사용 -- 정책 생성 CREATE AUDIT POLICY DI_ALL_ACTION_POL ACTIONS SELECT, UPDATE, DELETE, INSERT; COL POLICY_NAME FOR A20 COL AUDIT_OPTION FRO A20 COL AUDIT_OPTION FOR A20 COL OBJECT_SCHEMA FOR A20 COL OBJECT_NAME FOR A20 SELECT POLICY_NAME, AUDIT_OPTION, AUDIT_OPTION_TYPE, OBJECT_SCHEMA, OBJECT_NAME, OBJECT_TYPE FROM AUDIT_UNIFIED_POLICIES where policy_name='DI_ALL_ACTION_POL'; POLICY_NAME AUDIT_OPTION AUDIT_OPTION_TYPE OBJECT_SCHEMA OBJECT_NAME OBJECT_TYPE -------------------- -------------------- ------------------ -------------------- -------------------- ----------------------- DI_ALL_ACTION_POL INSERT STANDARD ACTION NONE NONE NONE DI_ALL_ACTION_POL SELECT STANDARD ACTION NONE NONE NONE DI_ALL_ACTION_POL UPDATE STANDARD ACTION NONE NONE NONE DI_ALL_ACTION_POL DELETE STANDARD ACTION NONE NONE NONE |
생성된 정책에 대하여 각 스키마를 할당 하여 액션이 성공 하였을때만 AUDIT 되도록 활성화 한다.
-- 정책에 대한 대상 활성화 AUDIT POLICY DI_ALL_ACTION_POL BY BIG, DW WHENEVER SUCCESSFUL; COL USER_NAME FOR A30 SELECT * FROM SYS.AUDIT_UNIFIED_ENABLED_POLICIES; USER_NAME POLICY_NAME ENABLED_ SUC FAI ------------------------------ -------------------- -------- --- --- BIG DI_ALL_ACTION_POL BY YES NO DW DI_ALL_ACTION_POL BY YES NO ALL USERS ORA_SECURECONFIG BY YES YES ALL USERS ORA_LOGON_FAILURES BY NO YES |
※ 정책에 대한 대상 비 활성화
NOAUDIT POLICY DI_ALL_ACTION_POL BY BIG, DW WHENEVER SUCCESSFUL;
UNIFIED_AUDIT_TRAIL 을 조회하여 위에 설정 된 스키마로 접속하여 수행된 액션에 대하여 AUDIT LOG를 확인 한다.
-- 로그 조회 select SESSIONID, OS_USERNAME, USERHOST, TERMINAL, AUTHENTICATION_TYPE, DBUSERNAME, CLIENT_PROGRAM_NAME, ENTRY_ID, STATEMENT_ID, EVENT_TIMESTAMP, ACTION_NAME, RETURN_CODE, OBJECT_SCHEMA, OBJECT_NAME, SQL_TEXT, UNIFIED_AUDIT_POLICIES from SYS.UNIFIED_AUDIT_TRAIL WHERE EVENT_TIMESTAMP >= TRUNC(SYSDATE) ORDER BY EVENT_TIMESTAMP DESC; select ENTRY_ID, STATEMENT_ID, SQL_TEXT from SYS.UNIFIED_AUDIT_TRAIL where SESSIONID=2952368630 ORDER BY EVENT_TIMESTAMP DESC; |
정책에 따라 다량의 AUDIT LOG가 수집될 수 있다.
수집된 로그에 대한 관리를 진행한다.
12시간 간격으로 audit에 대한 초기화를 진행한다.
-- 파라미터 조회 COLUMN parameter_name FORMAT A30 COLUMN parameter_value FORMAT A20 COLUMN audit_trail FORMAT A20 SELECT * FROM dba_audit_mgmt_config_params; PARAMETER_NAME PARAMETER_VALUE AUDIT_TRAIL ------------------------------ -------------------- -------------------- DB AUDIT TABLESPACE TBS_AUDIT STANDARD AUDIT TRAIL DB AUDIT TABLESPACE TBS_AUDIT FGA AUDIT TRAIL DB AUDIT TABLESPACE TBS_AUDIT UNIFIED AUDIT TRAIL AUDIT FILE MAX SIZE 10000 OS AUDIT TRAIL AUDIT FILE MAX SIZE 10000 XML AUDIT TRAIL AUDIT FILE MAX AGE 5 OS AUDIT TRAIL AUDIT FILE MAX AGE 5 XML AUDIT TRAIL DB AUDIT CLEAN BATCH SIZE 10000 STANDARD AUDIT TRAIL DB AUDIT CLEAN BATCH SIZE 10000 FGA AUDIT TRAIL OS FILE CLEAN BATCH SIZE 1000 OS AUDIT TRAIL OS FILE CLEAN BATCH SIZE 1000 XML AUDIT TRAIL AUDIT WRITE MODE QUEUED WRITE MODE UNIFIED AUDIT TRAIL AUDIT FILE MAX SIZE 10000 UNIFIED AUDIT TRAIL AUDIT FILE MAX AGE 5 UNIFIED AUDIT TRAIL -- 감사 체크 파라미터 설정 BEGIN DBMS_AUDIT_MGMT.init_cleanup( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL, default_cleanup_interval => 12 /* hours */); END; / COLUMN parameter_name FORMAT A30 COLUMN parameter_value FORMAT A20 COLUMN audit_trail FORMAT A20 SELECT * FROM dba_audit_mgmt_config_params; PARAMETER_NAME PARAMETER_VALUE AUDIT_TRAIL ------------------------------ -------------------- -------------------- DB AUDIT TABLESPACE TBS_AUDIT STANDARD AUDIT TRAIL DB AUDIT TABLESPACE TBS_AUDIT FGA AUDIT TRAIL DB AUDIT TABLESPACE TBS_AUDIT UNIFIED AUDIT TRAIL AUDIT FILE MAX SIZE 10000 OS AUDIT TRAIL AUDIT FILE MAX SIZE 10000 XML AUDIT TRAIL AUDIT FILE MAX AGE 5 OS AUDIT TRAIL AUDIT FILE MAX AGE 5 XML AUDIT TRAIL DB AUDIT CLEAN BATCH SIZE 10000 STANDARD AUDIT TRAIL DB AUDIT CLEAN BATCH SIZE 10000 FGA AUDIT TRAIL OS FILE CLEAN BATCH SIZE 1000 OS AUDIT TRAIL OS FILE CLEAN BATCH SIZE 1000 XML AUDIT TRAIL AUDIT WRITE MODE QUEUED WRITE MODE UNIFIED AUDIT TRAIL AUDIT FILE MAX SIZE 10000 UNIFIED AUDIT TRAIL AUDIT FILE MAX AGE 5 UNIFIED AUDIT TRAIL DEFAULT CLEAN UP INTERVAL 12 STANDARD AUDIT TRAIL DEFAULT CLEAN UP INTERVAL 12 FGA AUDIT TRAIL DEFAULT CLEAN UP INTERVAL 12 OS AUDIT TRAIL DEFAULT CLEAN UP INTERVAL 12 XML AUDIT TRAIL |
-- 감사 체크 파라미터 설정 확인 SET SERVEROUTPUT ON BEGIN IF DBMS_AUDIT_MGMT.is_cleanup_initialized(DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL) THEN DBMS_OUTPUT.put_line('YES'); ELSE DBMS_OUTPUT.put_line('NO'); END IF; END; / |
'YES' 로 나오면 설정이 잘 되었다.
※ 감사 체크 파라미터 설정 삭제
BEGIN
DBMS_AUDIT_MGMT.deinit_cleanup(
audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL);
END;
/
30일 이전에 생성된 AUDIT LOG는 timestamp를 통해 삭제 하도록 한다.
-- 로그 삭제 타임 스탭프 관리 BEGIN DBMS_AUDIT_MGMT.set_last_archive_timestamp( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, last_archive_time => SYSTIMESTAMP-30); END; / -- 타임 스탬프 확인 COLUMN audit_trail FORMAT A20 COLUMN last_archive_ts FORMAT A40 SELECT * FROM dba_audit_mgmt_last_arch_ts; AUDIT_TRAIL RAC_INSTANCE LAST_ARCHIVE_TS DATABASE_ID CONTAINER_GUID -------------------- ------------ ---------------------------------------- ----------- --------------------------------- UNIFIED AUDIT TRAIL 0 12-JUN-16 04.50.32.000000 PM +00:00 152219430 2BCBF61973D6C209E053146E12AC5B3C |
※ 타임 스탬프 초기화
BEGIN
DBMS_AUDIT_MGMT.clear_last_archive_timestamp(
AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED);
END;
/
설정된 timestamp를 통해 AUDIT LOG를 삭제 한다.
-- 감사 로그 수동 삭제 BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, USE_LAST_ARCH_TIMESTAMP => TRUE); END; / |
※ USE_LAST_ARCH_TIMESTAMP => FALSE 로 설정하면 timestamp를 사용 하지 않는다.
timestamp를 통해 자동으로 삭제 되도록 스케줄을 생성 한다.
-- 감사 로그 삭제 잡 생성 BEGIN DBMS_AUDIT_MGMT.create_purge_job( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL, audit_trail_purge_interval => 24 /* hours */, audit_trail_purge_name => 'PURGE_ALL_AUDIT_TRAILS', use_last_arch_timestamp => TRUE); END; / -- 감사 로그 삭제 잡 확인 SELECT job_action FROM dba_scheduler_jobs WHERE job_name = 'PURGE_ALL_AUDIT_TRAILS'; JOB_ACTION ------------------------------------------------------------------------------------------------------------------------------------------------------ BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(15, TRUE, 1); END; -- 감사 로그 삭제 잡 비활성/활성 BEGIN DBMS_AUDIT_MGMT.set_purge_job_status( audit_trail_purge_name => 'PURGE_ALL_AUDIT_TRAILS', audit_trail_status_value => DBMS_AUDIT_MGMT.PURGE_JOB_DISABLE); DBMS_AUDIT_MGMT.set_purge_job_status( audit_trail_purge_name => 'PURGE_ALL_AUDIT_TRAILS', audit_trail_status_value => DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE); END; / |
※ 감사 로그 잡 삭제
BEGIN
DBMS_AUDIT_MGMT.drop_purge_job(
audit_trail_purge_name => 'PURGE_ALL_AUDIT_TRAILS');
END;
/
timestamp는 자동으로 설정 되지 않으니 스케줄을 통해 설정 한다.
-- 로그 삭제 타임 스탭프 관리 잡 생성 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)-30); 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; / |
'OraclE' 카테고리의 다른 글
Oracle RAC 마스터 노드 찾기 (find Master Node) (0) | 2017.09.14 |
---|---|
DATAPUMP 암호화 (0) | 2017.01.19 |
RAC 원하는 노드에서 mview refresh 수행 (0) | 2016.04.11 |
Auditing Enhancements (aud$ 테이블 관리) (0) | 2016.04.11 |
dbms_scheduler 변경 (2) | 2016.01.04 |