AUDIT審計的一些使用

westzq1984發表於2012-11-15
11g開始預設開啟了審計功能,配置選項為DB,同時對許可權,登入進行了審計

審計其實是個很有用的功能,如果不打算使用審計,也可以考慮開啟審計,但是刪除其定義的規則即可:
noaduit all;
noaduit all statements;
noaudit all privileges;
noaudit EXEMPT ACCESS POLICY;

對於審計存放的位置,建議設定為XML,EXTENDED。這樣增加了對SQL語句的捕獲,並且存放在作業系統上,更利於清理
預設審計不會取AUDIT SYSDBA登入的使用者,除非設定AUDIT_SYS_OPERATIONS為TRUE。所以,在決定啟用審計的系統中,要嚴格控制SYSDBA許可權的使用者
在啟用審計的系統中,嚴格控制DBA角色的分配,否則,審計資料可能會被篡改

審計的維護:

遷移AUD$和FGA_LOG$表,直接MOVE的話,配置表中的資料不會更改。但是影響不大
BEGIN
 DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION(
  AUDIT_TRAIL_TYPE            => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD,
  AUDIT_TRAIL_LOCATION_VALUE  => 'USERS');
END;
/

清空所有審計資料
BEGIN
  DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL(
      AUDIT_TRAIL_TYPE        => DBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES,
      USE_LAST_ARCH_TIMESTAMP => FALSE);
END;
/
TRUNCATE TABLE SYS.AUD$;

11g可以建立自動清理審計資料的JOB
其可以根據歸檔時間進行清理
BEGIN  -- 清理DB審計資料必須初始化。
 DBMS_AUDIT_MGMT.INIT_CLEANUP(
  AUDIT_TRAIL_TYPE            => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
  DEFAULT_CLEANUP_INTERVAL    => 12);   -- 定義排程清理工作的頻率。其決定DB如何清理審計資料,但和實際執行頻率無關
END;
/

SELECT * FROM DBA_AUDIT_MGMT_CONFIG_PARAMS

BEGIN  -- 定義歸檔審計資料的時間戳
  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD,
   LAST_ARCHIVE_TIME    =>  SYSDATE);
  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS,
   LAST_ARCHIVE_TIME    =>  SYSDATE);
  DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP(
   AUDIT_TRAIL_TYPE     =>  DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML,
   LAST_ARCHIVE_TIME    =>  SYSDATE);     
END;
/

SELECT * FROM DBA_AUDIT_MGMT_LAST_ARCH_TS;


BEGIN
  DBMS_AUDIT_MGMT.CREATE_PURGE_JOB (
   AUDIT_TRAIL_TYPE            => DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL,
   AUDIT_TRAIL_PURGE_INTERVAL  => 24,
   AUDIT_TRAIL_PURGE_NAME      => 'Audit_Trail_PJ',
   USE_LAST_ARCH_TIMESTAMP     => TRUE );
END;
/

SELECT * FROM dba_scheduler_jobs



審計的一些用法:

審計登入
audit session;
本質是審計CREATE SESSION許可權的使用
可以獲得:登入時間,使用者名稱,主機,主機使用者名稱,主機上的程式號
SELECT * FROM DBA_COMMON_AUDIT_TRAIL
WHERE (STATEMENT_TYPE = 'LOGON'   -- 普通登入
OR OS_PRIVILEGE = 'SYSDBA')       -- SYSDBA登入
AND RETURNCODE > 0                 -- 失敗的登入

審計DDL
audit ALTER SYSTEM,CLUSTER,CONTEXT,DATABASE LINK,DIMENSION,DIRECTORY,INDEX,MATERIALIZED VIEW,OUTLINE,PROCEDURE ,PROFILE,PUBLIC DATABASE LINK,PUBLIC SYNONYM,ROLE,ROLLBACK SEGMENT,SEQUENCE,SYNONYM,SYSTEM AUDIT,SYSTEM GRANT,TABLE,TABLESPACE,TRIGGER,TYPE,USER,VIEW,ALTER SEQUENCE,ALTER TABLE,COMMENT TABLE,GRANT DIRECTORY,GRANT PROCEDURE,GRANT SEQUENCE,GRANT TABLE,GRANT TYPE
審計功能沒有提供一種可以直接審計全部DDL的方法
審計指定物件上的DDL:
  audit ALTER,AUDIT,COMMENT,GRANT,INDEX,RENAME on / default;
  audit AUDIT,COMMENT,GRANT,RENAME on / default

審計物件上的所有操作,包括DML操作
audit all on ;

審計由於物件不存在而報錯的語句
audit not exists;
SELECT * FROM dba_common_audit_trail WHERE returncode=942

審計報錯的語句
audit all statements whenever not successful; -- 審計DDL語句錯誤,以及PK衝突等
audit all on whenever not successful; -- 審計DML語句錯誤

如果撤銷使用者的DBA角色,需要分配給使用者那些必須的系統許可權
audit all privileges by ;
SELECT DISTINCT priv_used FROM dba_common_audit_trail WHERE db_user='

ALL與ALL STATEMENTS的區別
ALL審計特定的一類SQL,其不包含DML,ALTER TABLE等
ALL STATEMENTS審計使用者發出的所有SQL,不包含遞迴語句,同時,解析失敗的語句也不會記錄(DDL語句在執行時報錯,DML語句在解析時報錯)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8242091/viewspace-749270/,如需轉載,請註明出處,否則將追究法律責任。

相關文章