본문 바로가기
OraclE

ORACLE 12c UNIFIED AUDIT 사용

by 타마마임팩트_쫀 2016. 7. 13.

12c 에서 새로 나온 UNIFIED AUDIT 사용하면 기존 FGA 보다 편리하게 audit 기능을 사용할 수 있다.

UNIFIED AUDIT은 아래와 같이 다양한 소스로 부터 감사 정보를 수집할 수 있다.


  • Audit records (including SYS audit records) from unified audit policies and AUDIT settings

  • Fine-grained audit records from the DBMS_FGA PL/SQL package

  • Oracle 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;

/