這篇文章主要介紹“Oracle12.2c統一審計是什么”,在日常操作中,相信很多人在Oracle12.2c統一審計是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Oracle12.2c統一審計是什么”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
審計是指監控和記錄用戶對數據庫執行所有成功或失敗的操作。
而統一審計(UNIFIED_AUDIT_TRAIL)是Oracle在12c版本推出的一種全新的審計體系。在新的體系下,Oracle提供了更精細化的管理,并且將所有的審計記錄按照統一的格式寫入到AUDSYS schema下,可以通過UNIFIED_AUDIT_TRAIL視圖查看。默認地,審計記錄會被存放在SYSAUX表空間下。當然,Oracle也建議將審計數據從SYSAUX中剝離出來放到新的表空間下,這一功能可以通過DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_LOCATION包實現。
統一審計的相關權限?
除了SYS用戶外,只有被賦予AUDIT_ADMIN或AUDIT_VIEWER的用戶才能看到UNIFIED_AUDIT_TRAIL數據字典視圖。如果用戶只需要查詢UNIFIED_AUDIT_TRAIL,但是不需要創建審計策略(audit policy),那么只需要賦予AUDIT_VIEWER role就可以了。
SQL> SELECT VALUE FROM V$OPTION WHERE PARAMETER = 'Unified Auditing';
VALUE ---------------------------------------------------------------- FALSE |
TRUE:代表完全統一審計開啟;
FALSE:代表傳統審計和統一審計的混合模式。
什么是完全統一審計模式(Pure unified auditing)和混合審計模式(Mixed Mode Auditing)?
完全統一審計模式,顧名思義,就是摒棄了之前的傳統審計模式。
禁用統一審計方法,以單機為例:
shutdown cd $ORACLE_HOME/rdbms/lib make -f ins_rdbms.mk uniaud_off ioracle startup |
混合審計模式,只要開啟了統一審計策略,就會形成統一審計和傳統審計并存的局面,此時就是混合審計模式。默認建庫時會啟用ORA_SECURECONFIG,一個統一審計策略,這也就意味著默認建庫時,就是混合審計模式。
ORA_SECURECONFIG詳情如下:
CREATE AUDIT POLICY ORA_SECURECONFIG PRIVILEGES ALTER ANY TABLE, CREATE ANY TABLE, DROP ANY TABLE, CREATE ANY PROCEDURE, DROP ANY PROCEDURE, ALTER ANY PROCEDURE, GRANT ANY PRIVILEGE, GRANT ANY OBJECT PRIVILEGE, GRANT ANY ROLE, AUDIT SYSTEM, CREATE EXTERNAL JOB, CREATE ANY JOB, CREATE ANY LIBRARY, EXEMPT ACCESS POLICY, CREATE USER, DROP USER, ALTER DATABASE, ALTER SYSTEM, CREATE PUBLIC SYNONYM, DROP PUBLIC SYNONYM, CREATE SQL TRANSLATION PROFILE, CREATE ANY SQL TRANSLATION PROFILE, DROP ANY SQL TRANSLATION PROFILE, ALTER ANY SQL TRANSLATION PROFILE, TRANSLATE ANY SQL, EXEMPT REDACTION POLICY, PURGE DBA_RECYCLEBIN, LOGMINING, ADMINISTER KEY MANAGEMENT ACTIONS ALTER USER, CREATE ROLE, ALTER ROLE, DROP ROLE, SET ROLE, CREATE PROFILE, ALTER PROFILE, DROP PROFILE, CREATE DATABASE LINK, ALTER DATABASE LINK, DROP DATABASE LINK, CREATE DIRECTORY, DROP DIRECTORY, CREATE PLUGGABLE DATABASE, DROP PLUGGABLE DATABASE, ALTER PLUGGABLE DATABASE, EXECUTE ON DBMS_RLS; |
審計數據寫入數據文件有兩種方式:
1. immediate-write mode立即寫
2. queued-write mode隊列寫
立即寫是將產生的審計數據馬上寫入硬盤,這樣可以保證不丟失審計數據,但是對系統系統會有些許影響。
隊列寫是先將審計數據寫入SGA,而不是直接寫入數據文件,根據一定的策略再將審計數據寫入數據文件。一般有兩種策略:
l 時間策略:每隔三秒鐘,視系統繁忙程度,也可能三秒鐘了也沒有寫入。由隱含參數_unified_audit_flush_interval控制。
l 空間策略:存放在SGA中的審計數據容量達到85%。該區域默認是1M,由參數unified_audit_sga_queue_size控制,比例由隱含參數_unified_audit_flush_threshold控制
SQL> col name for a30; SQL> col value for a10; SQL> select * from 2 (select 3 x.ksppinm name, 4 y.ksppstvl value, 5 y.ksppstdf isdefault, 6 decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE') ismod, 7 decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE') isadj 8 from 9 sys.x$ksppi x, 10 sys.x$ksppcv y 11 where 12 x.inst_id = userenv('Instance') and 13 y.inst_id = userenv('Instance') and 14 x.indx = y.indx 15 order by 16 translate(x.ksppinm, ' _', ' ')) T where T.name like '%unified_audit%';
NAME VALUE ISDEFAULT ISMOD ISADJ ------------------------------ ---------- --------- ---------- ----- _unified_audit_flush_interval 3 TRUE FALSE FALSE _unified_audit_flush_threshold 85 TRUE FALSE FALSE _unified_audit_policy_disabled FALSE TRUE FALSE FALSE unified_audit_sga_queue_size 1048576 TRUE FALSE FALSE |
當前落盤方式
SQL> SELECT PARAMETER_VALUE 2 FROM DBA_AUDIT_MGMT_CONFIG_PARAMS 3 WHERE PARAMETER_NAME = 'AUDIT WRITE MODE';
PARAMETER_VALUE ----------------------------------------------------------------- QUEUED WRITE MODE |
修改為immediate-write mode
BEGIN DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY( DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE, DBMS_AUDIT_MGMT.AUDIT_TRAIL_IMMEDIATE_WRITE); END; / |
修改為
BEGIN DBMS_AUDIT_MGMT.SET_AUDIT_TRAIL_PROPERTY( DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, DBMS_AUDIT_MGMT.AUDIT_TRAIL_WRITE_MODE, DBMS_AUDIT_MGMT.AUDIT_TRAIL_QUEUED_WRITE); END; / |
隊列寫模式下如何手動flush審計數據?
手動刷新當前實例,適用于單機和rac單實例
EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL;
EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(DBMS_AUDIT_MGMT.FLUSH_CURRENT_INSTANCE);
|
Flush RAC所有實例
EXEC DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL(DBMS_AUDIT_MGMT.FLUSH_ALL_INSTANCES); |
對于多租戶環境
當前PDB
BEGIN DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL( CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT); END; / |
所有的PDB環境
BEGIN DBMS_AUDIT_MGMT.FLUSH_UNIFIED_AUDIT_TRAIL( CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_ALL); END; / |
當數據庫mount狀態,或者read only,或者關閉時,Oracle會將審計數據存放在操作系統的$ORACLE_BASE/audit/$ORACLE_SID目錄下。
查看當前操作系統下
oracle@bd-dev-mingshuo-183:/opt/app/oracle/audit/mingdb/70A2182C94E1412DE053B7D91FAC647A$ll total 32 -rw------- 1 oracle oinstall 30720 Jul 10 16:57 ora_audit_0786.bin |
登入數據庫執行
EXEC DBMS_AUDIT_MGMT.LOAD_UNIFIED_AUDIT_FILES; |
命令完成之后,操作系統那個文件就消失了。
每個PDB會有一個同名的uuid目錄,如果要將pdb的數據導入數據庫,那么需要在pdb中執行上述命令。
設置清理時間點
BEGIN DBMS_AUDIT_MGMT.SET_LAST_ARCHIVE_TIMESTAMP( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, LAST_ARCHIVE_TIME => '12-OCT-2013 06:30:00.00', RAC_INSTANCE_NUMBER => 1, CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT); END; / |
AUDIT_TRAIL_TYPE:指定審計數據類型
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED:統一審計數據
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD:AUD$表
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD:FGA_LOG$表
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS:操作系統上.aud結尾的文件
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML:XML文件
LAST_ARCHIVE_TIME:指定時間,設置后該時間可以從DBA_AUDIT_MGMT_LAST_ARCH_TS中查出,設置時間點的意義在于,會清理這個時間點之前的歸檔過的數據。
RAC_INSTANCE_NUMBER:RAC數據庫相關參數。單實例不需要設置。默認值是null。因為RAC數據庫也只有一個AUD$表和FGA_LOG$表
,那么即使是RAC數據庫,對應的審計類型DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD和DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD,那么也不用設置這個值。
CONTAINER:適用于多租戶環境
l DBMS_AUDIT_MGMT.CONTAINER_CURRENT:指定當前PDB
l DBMS_AUDIT_MGMT.CONTAINER_ALL:所有PDB
當上述設置完成后,就可以用DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL包清理設置的時間點之前的審計數據。
BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, use_last_arch_timestamp => TRUE); END; / |
創建清理job
BEGIN DBMS_AUDIT_MGMT.CREATE_PURGE_JOB ( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, AUDIT_TRAIL_PURGE_INTERVAL => 12, AUDIT_TRAIL_PURGE_NAME => 'Audit_Trail_PJ', USE_LAST_ARCH_TIMESTAMP => TRUE, CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT); END; / |
AUDIT_TRAIL_TYPE:指定審計數據類型
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED:統一審計數據
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_AUD_STD:針對AUD$表
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_FGA_STD:針對FGA_LOG$表
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD:針對AUD$表和FGA_LOG$表
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_OS:操作系統上.aud結尾的文件
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_XML:XML文件
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_FILES:操作系統上.aud結尾的文件和XML文件
l DBMS_AUDIT_MGMT.AUDIT_TRAIL_ALL:上述所有類型的審計數據
AUDIT_TRAIL_PURGE_INTERVAL:job每隔多久就運行一次,單位是小時。如果后面想要更改這個值,那么可以用DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL包。
USE_LAST_ARCH_TIMESTAMP:清理數據的時間選項
l TRUE:清理截止到上次歸檔的時間點
l FLASE:刪除所有的數據
CONTAINER:多租戶環境適用
l DBMS_AUDIT_MGMT.CONTAINER_CURRENT:PDB級別
l DBMS_AUDIT_MGMT.CONTAINER_ALL:CDB和PDB級別
設置好job后,啟動
BEGIN DBMS_AUDIT_MGMT.SET_PURGE_JOB_STATUS( AUDIT_TRAIL_PURGE_NAME => 'Audit_Trail_PJ', AUDIT_TRAIL_STATUS_VALUE => DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE); END; / |
AUDIT_TRAIL_PURGE_NAME:purge job策略的名字,就是上面CREATE_PURGE_JOB里指定的。
AUDIT_TRAIL_STATUS_VALUE:
l DBMS_AUDIT_MGMT.PURGE_JOB_ENABLE:開啟
l DBMS_AUDIT_MGMT.PURGE_JOB_DISABLE:停止
修改job運行間隔
BEGIN DBMS_AUDIT_MGMT.SET_PURGE_JOB_INTERVAL( AUDIT_TRAIL_PURGE_NAME => 'Audit_Trail_PJ', AUDIT_TRAIL_INTERVAL_VALUE => 24); END; / |
刪除清理job
BEGIN DBMS_AUDIT_MGMT.DROP_PURGE_JOB( AUDIT_TRAIL_PURGE_NAME => 'Audit_Trail_PJ'); END; / |
BEGIN DBMS_AUDIT_MGMT.CLEAN_AUDIT_TRAIL( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, USE_LAST_ARCH_TIMESTAMP => TRUE, CONTAINER => DBMS_AUDIT_MGMT.CONTAINER_CURRENT ); END; /
|
各參數含義同上。
為了防止審計數據過多,需要定期對審計數據進行清理。
移動審計表空間
BEGIN DBMS_AUDIT_MGMT.set_audit_trail_location( audit_trail_type => DBMS_AUDIT_MGMT.AUDIT_TRAIL_DB_STD, audit_trail_location_value => 'TBS_MING'); END; / |
設置purge job
BEGIN DBMS_AUDIT_MGMT.CREATE_PURGE_JOB ( AUDIT_TRAIL_TYPE => DBMS_AUDIT_MGMT.AUDIT_TRAIL_UNIFIED, AUDIT_TRAIL_PURGE_INTERVAL => 24, AUDIT_TRAIL_PURGE_NAME => 'Unified_Audit_Trail_PURGEJOB', USE_LAST_ARCH_TIMESTAMP => TRUE); END; / |
上面的job在運行時,要根據SET_LAST_ARCHIVE_TIMESTAMP的時間,下面的job可以手動刷新這個時間,不然上面的job最多只運行一次。
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)-60); 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; / |
到此,關于“Oracle12.2c統一審計是什么”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。