Oracle FGA細粒度審計——基於內容的資料庫審計(二)

realkid4發表於2011-06-27

 

Oracle FGA細粒度審計特性是Oracle推出的基於內容靈活審計策略工具。藉助FGA,很多過去需要使用觸發器和應用程式碼的需求都可以方便的實現。

 

上篇(http://space.itpub.net/17203031/viewspace-700767)已經介紹FGA的原理和配置,本篇繼續檢視應用情況。

 

 

4、FGA審計實驗

 

下面我們分別對上面設定的FGA審計規則結果進行檢視。首先,我們介紹一下檢視FGA審計結果的方式。

 

FGA審計策略和審計結果分別要記錄在SYS使用者下的fga$fga_log$資料表中。注意,這兩個物件是xx$資料表,屬於Oracle資料字典後設資料資訊層,是後設資料的底層內容。該型別資料表只屬於sys使用者,而且只能被sys使用者訪問到。通常,該型別資料表是不能透過許可權機制進行訪問許可權賦予的。

 

Xxx$資料表只有透過設定引數o7_DICTIONARY_ACCESSIBILITY開關設定才可能為非sys使用者訪問到。一般處於安全性考慮,我們也不進行這部分許可權的開放。

 

 

SQL> show parameter o7

 

NAME                                 TYPE            VALUE

------------------------------------ -----------------------------------------------

O7_DICTIONARY_ACCESSIBILITY          boolean   FALSE

 

 

兩個fga$fga_log$資料表中,fga$記錄FGA審計策略資訊,而fga_log$記錄審計結果記錄。

 

 

SQL> select obj#, pname, ptxt from fga$;

 

      OBJ# PNAME                PTXT

---------- -------------------- --------------------------------------------------------------------------------

     75156 POL_VID_LENGTH       length(vid)>5

     75156 POL_VID_MODIFY      

     75156 POL_DT_DEL           trunc(dt)

     75156 POL_VID_SELECT       to_char(sysdate,'Day') in ('星期六','星期日')

 

 

 

 

SQL> desc fga_log$;

Name         Type           Nullable Default Comments

------------ -------------- -------- ------- --------

SESSIONID    NUMBER                                  

TIMESTAMP#   DATE           Y                        

DBUID        VARCHAR2(30)   Y                        

OSUID        VARCHAR2(255)  Y                         

OSHST        VARCHAR2(128)  Y                        

CLIENTID     VARCHAR2(64)   Y                        

EXTID        VARCHAR2(4000) Y                        

OBJ$SCHEMA   VARCHAR2(30)   Y                        

OBJ$NAME     VARCHAR2(128)  Y                        

POLICYNAME   VARCHAR2(30)   Y                        

(篇幅原因,有省略……

 

 

通常我們檢查FGA審計策略或者結果,都可以使用dba_audit_policiesdba_fga_audit_trail兩個檢視。這兩個檢視分別與fga$fga_log$對應。如果非sys使用者進行FGA相關操作,擁有該兩個檢視的訪問許可權即可。

 

下面分別檢視上面設定四個fga policy的情況。

 

ü        對資料表T插入VID長度超過5的操作進行審計記錄;

 

對應審計策略:POL_VID_LENGTH

 

SQL> show user;

User is "scott"

 

SQL> insert into t values (4,'k45545', sysdate);

1 row inserted

 

SQL> commit;

Commit complete

 

--此時檢查dba_fga_audit_trail

SQL> select session_id, timestamp, db_user, os_user, userhost,POLICY_NAME, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID TIMESTAMP   DB_USER    OS_USER         USERHOST             POLICY_NAME                 SCN SQL_TEXT

---------- ----------- ---------- --------------- -------------------- -------------------- ---------- --------------------------------------------------------------------------------

   1630861 2011-6-24 2 SCOTT      Administrator   WORKGROUP\WWW-0E6111 DFF74 POL_VID_LENGTH          3861334 insert into t values (4,'k45545', sysdate)

                                                        

 

                                       

 

審計記錄成功,當我們插入一條vid長度超過5的記錄時,FGA記錄下了審計資訊。當我們插入非vid大於5的記錄時,FGA是否記錄呢?

 

SQL> insert into t values (5,'k', sysdate);

1 row inserted

 

SQL> commit;

Commit complete

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

 

當不滿足審計條件的時候,Oracle不會計入FGA審計記錄。

 

ü        修改資料表VID的所有操作;

 

對應審計策略:POL_VID_MODIFY

 

 

SQL> update t set id=6 where id=5;

1 row updated

 

SQL> update t set vid='kkl' where id=1;

1 row updated

 

SQL> commit;

Commit complete

 

 

兩條update語句,檢查審計記錄。

 

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

 

   1630861    3862855 update t set vid='kkl' where id=1

 

 

對兩條Update語句,只有針對vid有修改的那句SQL被審計資訊記錄下來。這點現象同FGA審計策略的要求相同。

 

ü        刪除資料表TDT列為當前天之前日期記錄的操作;

 

對應審計策略:POL_DT_DEL

 

 

SQL> select sysdate from dual;

 

SYSDATE

-----------

2011-6-24 2

 

SQL> select * from t;

 

        ID VID        DT

---------- ---------- -----------

         1 kkl        2011-6-23 1

         2 dfse       2011-6-22 1

         3 ffdfse     2011-6-24 1

         4 k45545     2011-6-24 2

         6 k          2011-6-24 2

 

 

進行刪除實驗。

 

 

SQL> delete t where id=2; //dt=2011-6-22

1 row deleted

 

SQL> delete t where id=6; //dt=2011-6-27

1 row deleted

 

SQL> commit;

Commit complete

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

 

   1630861    3862855 update t set vid='kkl' where id=1

 

   1630861    3863122 delete t where id=2

 

 

dt在當前日期之前記錄進行刪除delete的操作,會被審計策略記錄下來。

 

ü        在週末(週日、週六),檢索VID資料的操作;

 

對應FGA審計策略POL_VID_SELECT

 

//當天是週五的情況下

SQL> select to_char(sysdate,'Day') from dual;

 

TO_CHAR(SYSDATE,'DAY')

----------------------

星期五

 

 

我們進行兩次檢索實驗。

 

//檢索操作涉及到vid欄位;

SQL> select * from t;

 

        ID VID        DT

---------- ---------- -----------

         1 kkl        2011-6-23 1

         3 ffdfse     2011-6-24 1

         4 k45545     2011-6-24 2

 

//檢索操作為涉及到vid欄位;

SQL> select id from t;

 

        ID

----------

         1

         3

         4

 

 

此時,檢索結果。

 

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

 

   1630861    3862855 update t set vid='kkl' where id=1

 

   1630861    3863122 delete t where id=2

 

 

沒有新的審計結果出現。

 

Linux下修改系統時間資訊。

 

//當前系統時間

[root@oracle11g ~]# date

Fri Jun 24 22:42:06 CST 2011

 

//系統時間設定

[root@oracle11g ~]# date 062522452011.30

Sat Jun 25 22:45:30 CST 2011

 

 

此時,Oracle資料庫立即反應出變化。

 

 

SQL> select sysdate from dual;

 

SYSDATE

-----------

2011-6-25 2

 

SQL> select to_char(sysdate,'Day') from dual;

 

TO_CHAR(SYSDATE,'DAY')

----------------------

星期六

 

 

此時,我們進行相同的操作,就可以發現策略應用。

 

 

SQL> select * from t;

 

        ID VID        DT

---------- ---------- -----------

         1 kkl        2011-6-23 1

         3 ffdfse     2011-6-24 1

         4 k45545     2011-6-24 2

 

SQL> select id from t;

 

        ID

----------

         1

         3

         4

 

SQL> select session_id, SCN, SQL_TEXT from dba_fga_audit_trail;

 

SESSION_ID        SCN SQL_TEXT

---------- ---------- --------------------------------------------------------------------------------

   1630861    3861334 insert into t values (4,'k45545', sysdate)

   1630861    3862855 update t set vid='kkl' where id=1

   1630861    3863122 delete t where id=2

   1630861    3868781 select * from t

 

4 rows selected

 

 

FGA策略pol_vid_select的應用成功。只有在週末的時候,對vid欄位的select操作進行操作才會被審計記錄。

 

 

本篇中我們觀察了設定的四個policies的審計實現。下面我們來觀察一下dbms_fga的其他方法和審計記錄purge的方式。

 

 

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

相關文章