Oracle FGA細粒度審計——基於內容的資料庫審計(一)
Oracle推出的標準Standard審計機制,提供了對於資料庫物件DDL、特定User特定安全行為的審計Audit。標準審計可以幫助DBA和資訊審計人員掌握生產系統各種重要變化資訊,並且跟蹤其行為。
但是很多時候,我們常常會遇到下列情況的需求:
ü 記錄向使用者user表插入記錄detpno=10的操作日誌資訊;
ü 記錄更改使用者姓名欄位取值的操作日誌資訊;
ü 記錄刪除日誌記錄的操作資訊;
ü 記錄每天下班之後,對信用卡欄位進行檢索的操作資訊;
相對於標準審計機制,此類的審計需求靈活性強。很多時候,都是透過應用層面專門書寫審計模組或者書寫觸發器來實現。這種方法可能出現審計遺漏或者帶來效能問題。實際中,我們可以使用Oracle的細粒度審計FGA(Fine-grained Audit)來實現。
1、 FGA概述
Oracle Fine-Grained Audit(細粒度審計)是相對於傳統Oracle審計功能而言的。我們可以藉助FGA指定複雜的審計條件,根據條件的發生來引發審計動作。FGA是我們可以對訪問資料的操作進行控制審計,使資料設計的層次達到最下層的資料層面。
FGA集中功能在資料表的DML操作審計上,對特定資料表的select、update、insert和delete操作。資料庫使用者的許可權設定只能控制到是否允許進行操作的層面,而沒有對一些更復雜的需求進行考量。
使用FGA通常需要如下步驟:
ü 確定FGA審計需求。要明確系統準確的審計需求,是進行FGA策略設定的第一個步驟。通常方式是對某張資料表進行某種型別操作的時候,在什麼情況下需要進行審計記錄;
ü 確定審計記錄內容和方式。目前FGA支援DB儲存和XML檔案儲存兩種方式,要做出審計方案選擇。同時,審計內容中有對SQL進行記錄的選擇專案,也要確認;
ü 使用DBMS_FGA包,定義審計策略。DBMS_FGA包是進行FGA審計策略定義、刪除、啟用禁用的工具包,歸屬sys schema。如果非sys使用者執行,需要擁有execute許可權;
ü 啟動FGA策略,定期檢視FGA$或者dba_fga_audit_trail檢視中的審計結果;
下面使用一個例項來進行介紹說明。
2、 實驗環境準備
在scott使用者下建立資料表T,其中包括一些實驗欄位和基礎資料值。
SQL> select * from v$version where rownum<2;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 – Production
SQL> create table t (id number, vid varchar2(10), dt date);
Table created
SQL> select * from t;
ID VID DT
---------- ---------- --------------------
1 kfsd 2011-6-23 1:45:39
2 dfse 2011-6-22 1:45:46
3 ffdfse 2011-6-24 1:45:53
審計需求如下:
ü 對資料表T插入VID長度超過5的操作進行審計記錄;
ü 修改資料表VID的所有操作;
ü 刪除資料表T中DT列為當前天之前日期記錄的操作;
ü 在週末(週日、週六),檢索VID資料的操作;
ü 審計記錄儲存在資料庫中即可;
建立了環境,明確了需求,下面可以建立審計策略policy。
3、設定審計規則策略
每個審計需求,都可以實現為一條審計策略policy。啟用的policy可以在設定的時機進行激發,將審計資訊記錄下來。
Oracle FGA是使用dbms_fga程式包進行審計規則的建立,使用add_policy方法進行審計策略建立。下面是該方法的API介面。
//dbms_fga包宣告方法
PROCEDURE add_policy(object_schema IN VARCHAR2 := NULL,
object_name IN VARCHAR2,
policy_name IN VARCHAR2,
audit_condition IN VARCHAR2 := NULL,
audit_column IN VARCHAR2 := NULL,
handler_schema IN VARCHAR2 := NULL,
handler_module IN VARCHAR2 := NULL,
enable IN BOOLEAN := TRUE,
statement_types IN VARCHAR2 := 'SELECT',
audit_trail IN PLS_INTEGER := 3,
audit_column_opts IN BINARY_INTEGER DEFAULT 0,
policy_owner IN VARCHAR2 := NULL);
add_policy方法的可用引數很多,而且大部分引數帶有預設值。下面表格進行概要說明。
引數名稱 |
含義作用 |
預設值 |
object_schema |
指定進行審計的物件所隸屬的使用者schema。如果沒有指定,就認為是當前的使用者下; |
NULL |
object_name |
指定審計物件名稱; |
無 |
policy_name |
FGA審計策略的名稱; |
無 |
audit_condition |
設定進行審計活動的條件,該引數是一個布林表示式。當進行statement_type操作的時候,進行條件驗證,如果為True就表示進行審計; |
NULL,作用和True相同; |
audit_column |
指定資料表的一個到多個column的名稱,當statement_type操作涉及到該資料列的時候,就進行審計; |
NULL,表示所有列; |
handler_schema |
在審計策略被激發的時候,可以呼叫一段程式程式碼。hander_schema表示程式程式碼的所屬schema; |
NULL,如果設定上handler_module,表示當前的schema; |
handler_module |
在審計策略被激發的時候,呼叫的程式程式碼名稱; |
|
enable |
啟動審計策略開關; |
True; |
statement_type |
審計操作動作,包括select、update、delete和insert; |
select |
audit_trail |
設定審計內容層次和審計記錄存放位置;Oracle目前支援DB和XML檔案兩種方式,可以設定詳細的SQL變數資訊; |
3,存放在資料庫中; |
audit_column_opt |
audit_column中如果是多列的話,是所有列進行審計動作,還是任意列進行審計動作; |
任意列進行審計動作; |
policy_owner |
設定的policy的所屬owner; |
|
|
|
|
我們提交的審計需求,可以透過如下程式碼實現。
ü 對資料表T插入VID長度超過5的操作進行審計記錄;
建立審計策略pol_vid_length。
SQL> show user;
User is "SYS"
SQL> begin
2 dbms_fga.add_policy(object_schema => 'SCOTT',
3 object_name => 'T',
4 policy_name => 'pol_vid_length',
5 audit_condition => 'length(vid)>5',
6 enable => True,
7 audit_trail => dbms_fga.DB_EXTENDED,
8 statement_types => 'INSERT');
9 end;
10 /
PL/SQL procedure successfully completed
思路難點:審計條件點是在insert動作時進行的,額外條件是vid欄位長度大於5。
ü 修改資料表VID的所有操作;
建立策略pol_vid_modify。
SQL> begin
2 dbms_fga.add_policy(object_schema => 'SCOTT',
3 object_name => 'T',
4 policy_name => 'pol_vid_modify',
5 audit_column => 'VID',
6 enable => True,
7 audit_trail => dbms_fga.DB_EXTENDED,
8 statement_types => 'UPDATE');
9 end;
10 /
PL/SQL procedure successfully completed
思路難點:只針對資料列vid的update操作時,才會進行審計動作。
ü 刪除資料表T中DT列為當前天之前日期記錄的操作;
建立審計策略pol_dt_del。
SQL> begin
2 dbms_fga.add_policy(object_schema => 'SCOTT',
3 object_name => 'T',
4 policy_name => 'pol_dt_del',
5 audit_condition => 'trunc(dt)
6 enable => True,
7 audit_trail => dbms_fga.DB_EXTENDED,
8 statement_types => 'DELETE');
9 end;
10 /
PL/SQL procedure successfully completed
思路難點:審計條件設定。
ü 在週末(週日、週六),檢索VID資料的操作;
建立審計策略pol_vid_select。
SQL> begin
2 dbms_fga.add_policy(object_schema => 'SCOTT',
3 object_name => 'T',
4 policy_name => 'pol_vid_select',
5 audit_condition => 'to_char(sysdate,''Day'') in (''星期六'',''星期日'')',
6 enable => True,
7 audit_trail => dbms_fga.DB_EXTENDED,
8 statement_types => 'SELECT',
9 audit_column => 'VID');
10 end;
11 /
PL/SQL procedure successfully completed
從資料字典dba_audit_policies中,可以檢查出設定的policy資訊。
SQL> select object_name, policy_name, SEL, INS, UPD, DEL, AUDIT_TRAIL, POLICY_COLUMN_OPTIONS from dba_audit_policies;
OBJEC POLICY_NAME SEL INS UPD DEL AUDIT_TRAIL POLICY_COLUMN_OPTIONS
----- --------------- --- --- --- --- ------------ ---------------------
T POL_VID_LENGTH NO YES NO NO DB+EXTENDED ANY_COLUMNS
T POL_VID_MODIFY NO NO YES NO DB+EXTENDED ANY_COLUMNS
T POL_DT_DEL NO NO NO YES DB+EXTENDED ANY_COLUMNS
T POL_VID_SELECT YES NO NO NO DB+EXTENDED ANY_COLUMNS
對專門columns的審計資訊,可以在dba_audit_policy_columns檢視中檢查到。
SQL> select * from dba_audit_policy_columns;
OBJECT_SCHEMA OBJEC POLICY_NAME POLICY_COLUMN
------------------------------ ----- --------------- ------------------------------
SCOTT T POL_VID_MODIFY VID
下面透過實驗來驗證這些policy的應用情況。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/17203031/viewspace-700767/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle FGA細粒度審計——基於內容的資料庫審計(二)Oracle資料庫
- Oracle FGA細粒度審計——基於內容的資料庫審計(三)Oracle資料庫
- oracle 細粒度審計(fga)Oracle
- 【FGA】將FGA細粒度審計功能的審計結果記錄在資料庫中資料庫
- oracle細粒度審計Oracle
- Fine-grainedauditing(FGA) 細粒度審計AI
- 【FGA】將FGA細粒度審計功能的審計結果記錄在XML檔案中XML
- oracle審計-細粒度(轉)Oracle
- 細粒度審計FGA儲存過程含義儲存過程
- Oracle OCP(52):細粒度審計Oracle
- Oracle Database標準審計和細粒度審計功能OracleDatabase
- Oracle FGA審計功能Oracle
- 【實驗】【審計】【FGA】使用Oracle的審計功能監控資料庫中的可疑操作Oracle資料庫
- 【FGA】擴充套件Oracle細粒度審計功能——呼叫定製的儲存過程套件Oracle儲存過程
- oracle 10g 增強審計(二)----細粒度訪問審計Oracle 10g
- oracle fga審計(欄位級)Oracle
- 利用Oracle FGA實現審計Oracle
- 【審計】標準資料庫審計資料庫
- 審計Oracle資料庫的使用Oracle資料庫
- ORACLE 資料庫審計詳解Oracle資料庫
- ORACLE資料庫標準審計Oracle資料庫
- Oracle資料庫審計功能介紹Oracle資料庫
- 資料庫審計-hexorbase資料庫HexoORB
- 拍拍貸資料庫審計資料庫
- 資料庫DDL操作審計資料庫
- FGA審計及audit_trail引數AI
- 舉例說明Oracle資料庫審計的用法Oracle資料庫
- Fine-Grained Auditing test (精細審計:FGA測試)AI
- 關於oracle審計功能Oracle
- MySQL資料庫審計系統MySql資料庫
- Access資料庫審計工具mdbtools資料庫
- Oracle審計Oracle
- oracle 審計Oracle
- Oracle資料庫內部安全威脅:審計特權使用者Oracle資料庫
- 網路安全審計主要包括哪些內容?
- RHEL審計內容/etc/audit/audit.rules
- 資料庫審計技術進化資料庫
- 開啟mysql 資料庫審計功能。MySql資料庫