ORACLE DB 的學習者們

2018年4月23日 星期一

ORACLE AUDIT

參考文件



建立稽核專用Tablespace

        
    CREATE TABLESPACE AUX_AUDIT DATAFILE 
      'C:\SID\TBS_AUDIT_01.dbf' SIZE 900M AUTOEXTEND OFF
      LOGGING
      EXTENT MANAGEMENT LOCAL AUTOALLOCATE
      BLOCKSIZE 8K
      SEGMENT SPACE MANAGEMENT AUTO
      FLASHBACK ON;
    

AUDIT的環境設定

要設定的內容包含稽核預設的TABLESPACE,預計清除紀錄的時間間隔等。使用的工具為 DBMS_AUDIT_MGMT,必須以SYS身分使用SQLPLUS來執行。
ORACLE的AUDIT有兩個系統預設的TABLE,分別為 SYS.AUD$ (基本) 與SYS.FGA_LOG$ (細微)。 此二TABLE的預設TABLESPACE皆為SYSTEM,若不先將其移至其他位置,若紀錄持續成長到佔滿空間, 將使DB無法登入。

SELECT table_name, tablespace_name
FROM   dba_tables
WHERE  table_name IN ('AUD$', 'FGA_LOG$')
ORDER BY table_name;

更改標準AUDIT的位置

BEGIN
  DBMS_AUDIT_MGMT.set_audit_trail_location(
    audit_trail_type           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
    audit_trail_location_value => ' AUX_AUDIT ');
END;

更改細微AUDIT的位置

BEGIN
  DBMS_AUDIT_MGMT.set_audit_trail_location(
    audit_trail_type           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,
    audit_trail_location_value => ' AUX_AUDIT ');
END;
SELECT table_name, tablespace_name
FROM   dba_tables
WHERE  table_name IN ('AUD$', 'FGA_LOG$')
ORDER BY table_name;

設定清除區間

以下設定每12小時清除一次
BEGIN
  DBMS_AUDIT_MGMT.init_cleanup(
    audit_trail_type         => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
    default_cleanup_interval => 12 /* hours */);
END;

修改AUDIT基本參數(重啟DB)

開啟AUDIT前先使用SHOW PARAMETER AUDIT確認稽核檔的寫入位置有設定且路徑是對的。 設定參數時須以SYS身分在DB主機以SQLPLUS執行。執行完畢需重啟DB。
SQL> alter system set audit_sys_operations=TRUE scope=spfile;

SQL> alter system set audit_trail=xml,extended scope=spfile;

SQL> shutdown immediate;

設定系統稽核範圍

以下CONSOLE以SYSDBA身分執行 稽核指令稿如下:將下列寫成一個SCRIPT檔,稱為audit.sql
設定稽核範圍
--紀錄以下使用者的登錄(假設想記錄SUPERUSER的動作)

noaudit all;  --先取消所有稽核選項,重新設定選項
audit session by system;
audit session by sys;
audit session by SUPERUSER;

--紀錄重要異動
audit select any table by SUPERUSER;
audit insert any table by SUPERUSER;
audit delete any table by SUPERUSER;
audit update any table by SUPERUSER;

--紀錄對AUDIT TRAIL 本身之異動,以保護稽核紀錄
AUDIT INSERT, UPDATE, DELETE ON sys.aud$ BY ACCESS;

與AUDIT內容有關的資料字典

以下資料字典可觀察DB裡被稽核的內容。



  • Statement:  DBA_STMT_AUDIT_OPTS
  • Object:  DBA_OBJ_AUDIT_OPTS, USER_OBJ_AUDIT_OPTS
  • Privilege:  DBA_PRIV_AUDIT_OPTS


與AUDIT設定有關的資料字典

AUDIT設定的項目可由dba_audit_mgmt_config_params 查詢,下列SQL查詢目前的設定值 SQL> select * from dba_audit_mgmt_config_params;

設定XML AUDIT FILE大小

由圖可知預設值是 10000kb,透過下列SQL可調整為15000kb
BEGIN
  DBMS_AUDIT_MGMT.set_audit_trail_property(
    audit_trail_type           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
    audit_trail_property       => DBMS_AUDIT_MGMT.OS_FILE_MAX_SIZE,
    audit_trail_property_value => 15000);
END;

設定XML AUDIT FILE最大天數

以下將其天數由五天改為10天。
BEGIN
  DBMS_AUDIT_MGMT.set_audit_trail_property(
    audit_trail_type           => DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
    audit_trail_property       => DBMS_AUDIT_MGMT.OS_FILE_MAX_AGE,
    audit_trail_property_value => 10);
END;

稽核紀錄查詢

audit_actions

稽核紀錄中的欄位ACTION是用代碼顯示,每個代碼的意義存放於此TABLE,代碼共計約118筆

V$XML_AUDIT_TRAIL

若稽核的選項是 XML, EXTENDED,它會將紀錄以XML方式記錄於指定位置,但可透過此VIEW來查詢它的內容,其中有DB_USER, OS_USER, TERMINAL, OBJECT_SCHEMA, OBJECT_NAME 和 SQL_TEXT等欄位。

稽核紀錄管理

稽核紀錄如果不處理,會持續成長到影響系統效能。紀錄可運用時間戳記來管理,為刪除或整理設立一個時間點。 AUDIT的時間戳記紀錄在dba_audit_mgmt_last_arch_ts,可透過指令來設定 : SQL> SELECT * FROM dba_audit_mgmt_last_arch_ts;

設定稽核的時間戳記

使用時間戳記來管理紀錄,先設定最後截止時間戳記,以下設定五天前,設定後可清除在此戳記前的資料
BEGIN
  DBMS_AUDIT_MGMT.set_last_archive_timestamp(
    audit_trail_type  => DBMS_AUDIT_MGMT. AUDIT_TRAIL_XML,
    last_archive_time => SYSTIMESTAMP-5);
END;

運用時間戳記管理紀錄

紀錄可透過CLEAR_LAST_ARCHIVE_TIMESTAMP來管理。 以下將所有紀錄皆刪除(參數 use_last_arch_timestamp 設為FALSE )。

BEGIN
  DBMS_AUDIT_MGMT.clean_audit_trail(
   audit_trail_type        => DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
   use_last_arch_timestamp => FALSE);
END;
以下將時間戳記前的所有紀錄皆刪除(參數 use_last_arch_timestamp 設為TRUE)。
BEGIN
  DBMS_AUDIT_MGMT.clean_audit_trail(
   audit_trail_type        => DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
   use_last_arch_timestamp => TRUE);
END;
以下將時間戳記前的所有紀錄皆刪除 (使用CLEAR_LAST_ARCHIVE_TIMESTAMP)
BEGIN
  DBMS_AUDIT_MGMT.clear_last_archive_timestamp(
    audit_trail_type     =>  DBMS_AUDIT_MGMT. AUDIT_TRAIL_XML);
END;