Tuesday, September 16, 2014

Audit Trails 的資料刪除的管理

參考文件                                                            
Oracle Database Security Guide : Purging Audit Trail Records
http://docs.oracle.com/cd/E11882_01/network.112/e36292/auditing.htm#DBSEG90934


目標
使用DBMS_AUDIT_MGMT 管理稽核資料的清除。

流程說明
1 . 調整redo log sizes 來適應 audit table purge process
2 . 必須定義清除的類型與時間間隔,類型有 tablesAudit FilesAudit XMLs
3 . 必須設定timestamp,清除的工具會刪除這個時間戳記之前的資料 。
4 . 利用 DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL 這個 procedure 清除。
5 . 若要設定排程清除,請操作Step 1. 設定清除的類型。

操作細節
Step 1 . 設定清除的類型與清除的時間間隔。

BEGIN
 DBMS_AUDIT_MGMT.INIT_CLEANUP(
  AUDIT_TRAIL_TYPE            => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
  DEFAULT_CLEANUP_INTERVAL    => 2 );
END;
/
--## 查詢是否設定完成,請注意,設定 init_cleanup 會先將兩table資料搬移到sysaux。
SQL> select * from dba_audit_mgmt_config_params
where PARAMETER_NAME = 'DEFAULT CLEAN UP INTERVAL';

PARAMETER_NAME                 PARAMETER_VALUE                AUDIT_TRAIL
------------------------------ ------------------------------ ------------------------------
DEFAULT CLEAN UP INTERVAL      2                              STANDARD AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL      2                              FGA AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL      2                              OS AUDIT TRAIL
DEFAULT CLEAN UP INTERVAL      2                              XML AUDIT TRAIL

--## 清除 init_cleanup 的方式。
SQL> conn / as sysdba
BEGIN
 DBMS_AUDIT_MGMT.DEINIT_CLEANUP(
  AUDIT_TRAIL_TYPE  => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL);
END;
/




選項說明 :
DEFAULT_CLEANUP_INTERVAL : 清除的時間間隔(小時),若使用Database自帶schedule做排程,則可設定此選項。

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 : 包含AUD$ FGA_LOG$ 兩個表格
DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS: 存放於以下目錄副檔名 .aud 的稽核紀錄檔案。
           $ORACLE_BASE/admin/$ORACLE_SID/adump
DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML: 稽核紀錄為 XML 類型的稽核紀錄檔案
DBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES: 包含 .aud XML類型的稽核紀錄檔。
DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL : 所有的稽核紀錄,包含AUD$FGA_LOG$ 表格與 .aud XML類型的稽核紀錄檔。

Step 2 . 設定TIMESTAMP
設定TIMESTAMP30天之前,設定此項目只是定義一個日期讓DBMS_AUDIT_MGMT知道要刪除哪個日期之前的資料,若以排程清除的話則每次刪除前都要先執行以下項目定義日期。
SQL> conn / as sysdba

## 11.2.0.1
SQL> BEGIN
   DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
   LAST_ARCHIVE_TIME    =>  sysdate - 30
   );          
END;
/

--因無AUDIT_TRAIL_ALL類型的設定值,建議將以下四種類型都設定。
AUDIT_TRAIL_AUD_STD   
AUDIT_TRAIL_FGA_STD
AUDIT_TRAIL_OS
AUDIT_TRAIL_XML

--查詢所設定的 Timestamp
SQL> select * from DBA_AUDIT_MGMT_LAST_ARCH_TS;

AUDIT_TRAIL          RAC_INSTANCE LAST_ARCHIVE_TS
-------------------- ------------ ----------------------------------------
STANDARD AUDIT TRAIL            0 13-FEB-14 05.23.13.000000 PM +00:00
FGA AUDIT TRAIL                 0 13-FEB-14 05.27.15.000000 PM +00:00
OS AUDIT TRAIL                  1 13-FEB-14 05.27.24.000000 PM +08:00
XML AUDIT TRAIL                 1 13-FEB-14 05.27.34.000000 PM +08:00




Step 3 . 手動刪除
SQL> conn / as sysdba

SQL> BEGIN
  DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
   AUDIT_TRAIL_TYPE           =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
   USE_LAST_ARCH_TIMESTAMP    =>  TRUE );
END;
/

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 : 包含AUD$ FGA_LOG$ 兩個表格
DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS: 存放於以下目錄的副檔名 .aud 的稽核紀錄檔案。
           $ORACLE_BASE/admin/$ORACLE_SID/adump
DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML: 稽核紀錄為 XML 類型的稽核紀錄檔案
DBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES: 包含 .aud XML類型的稽核紀錄檔。
DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL : 所有的稽核紀錄,包含AUD$FGA_LOG$ 表格與 .aud XML類型的稽核紀錄檔。

USE_LAST_ARCH_TIMESTAMP 選項說明 :
        TRUE : 刪除DBA_AUDIT_MGMT_LAST_ARCH_TS表格中紀錄的時間之前的Audit records
        FALSE : 刪除所有的Audit recores



Step 4 . 排程刪除 30 天之前的稽核資料
需操作Step 1 . 設定清除的類型。
# su – oracle
$ vi /hoem/oracle/bin/clean_audit_trail.sh
#/bin/ksh
export ORACLE_HOME=/u2/oracle/product/11.2.0/dbhome_1
export ORACLE_BASE=/u2/oracle
export ORACLE_SID=topprod
export NLS_LANG="AMERICAN_AMERICA.AL32UTF8"
export NLS_DATE_FORMAT='RRRR/MM/DD'
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBARY_PATH
export PATH=$ORACLE_HOME/bin:$HOME:$PATH

sqlplus /nolog << eof
conn / as sysdba
--## Set TIMESTAMP
BEGIN
   DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
   LAST_ARCHIVE_TIME    =>  sysdate - 30
   );          
END;
/
BEGIN
   DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
   LAST_ARCHIVE_TIME    =>  sysdate - 30
   );          
END;
/
BEGIN
   DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
   LAST_ARCHIVE_TIME    =>  sysdate - 30
   );          
END;
/
BEGIN
   DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
   LAST_ARCHIVE_TIME    =>  sysdate - 30
   );          
END;
/
--## Clean audit trail records
BEGIN
  DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
   AUDIT_TRAIL_TYPE           =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
   USE_LAST_ARCH_TIMESTAMP    =>  TRUE );
END;
/
BEGIN
  DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
   AUDIT_TRAIL_TYPE           =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
   USE_LAST_ARCH_TIMESTAMP    =>  TRUE );
END;
/
BEGIN
  DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
   AUDIT_TRAIL_TYPE           =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,  
   USE_LAST_ARCH_TIMESTAMP    =>  TRUE );
END;
/
BEGIN
  DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
   AUDIT_TRAIL_TYPE           =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
   USE_LAST_ARCH_TIMESTAMP    =>  TRUE );
END;
/

再將/hoem/oracle/bin/clean_audit_trail.sh 加入排程即可



No comments:

Post a Comment