oracle FGA的學習

jolly10發表於2007-09-21

Oracle9i Database 推出了一種稱為細粒度審計 (FGA) 的新特性,可以審計所有DML語句

[@more@]

Oracle9i Database 推出了一種稱為細粒度審計 (FGA) 的新特性,可以審計所有DML語句

例示:
1.用sys帳號建立使用者並賦許可權
SQL>grant connect,resource to bank identified by bank;

2.登入bank帳號建立accounts表
create table accounts(
acct_no number not null,
cust_id number not null,
balance number(15,2));

3.用sys帳號建立審計規則
begin
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS'
);
end;

4.bank帳號查詢accounts表
select * from bank.accounts;
(經測試sys使用者查詢此表時不會記錄在審計資訊中,其它使用者訪問時則會記錄)

5.sys使用者查詢審計資訊
SQL> select timestamp,
2 db_user,
3 os_user,
4 object_schema,
5 object_name,
6 sql_text
7 from dba_fga_audit_trail;

TIMESTAMP DB_USER OS_USER OBJECT_SCHEMA OBJECT_NAM SQL_TEXT
-------------- ---------- --------------- --------------- ---------- -----------------------------
21-9月 -07 BANK QHTLUJGuser BANK ACCOUNTS select * from accounts

可以增加審計列和審計條件,如下:
begin
dbms_fga.add_policy (
object_schema=>'BANK',
object_name=>'ACCOUNTS',
policy_name=>'ACCOUNTS_ACCESS',
audit_column => 'BALANCE',
audit_condition => 'BALANCE >= 11000'
);
end;


刪除審計策略
begin
dbms_fga.drop_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS'
);
end;


停用審計策略
begin
dbms_fga.enable_policy (
object_schema => 'BANK',
object_name => 'ACCOUNTS',
policy_name => 'ACCOUNTS_ACCESS',
enable => FALSE
);
end;
要重新啟用它,可使用同一函式,但是將引數 enable 設定為 TRUE。


也可以對儲存過程進行審計,用以下兩個引數:
handler_schema 擁有資料過程的模式
handler_module 過程名稱

FGA 資料字典檢視
FGA 策略的定義位於資料字典檢視 DBA_AUDIT_POLICIES 中。
審計線索收集在 SYS 擁有的表 FGA_LOG$ 中。DBA_FGA_AUDIT_TRAIL 是該表上的一個檢視。


10G FGA的擴充套件

在 Oracle 9i Database 下,這個策略只能審計 SELECT 語句。然而,在 Oracle Database 10g 中,您可以擴充套件它,使它包含 INSERT、UPDATE 和 DELETE。您可以透過指定一個新的引數來實現這個目的:


statement_types => 'INSERT, UPDATE, DELETE, SELECT'

statement_type 引數預設情況下只審計 SELECT 語句。

在 FGA 審計線索中,獲取賦值變數的值:audit_trail = DB_EXTENDED,停止獲取audit_trail => DB,預設情況下,捕獲賦值變數,這個引數的值為 DB_EXTENDED。


FGA 和常規審計:差異

如果標準審計和細粒度審計在 Oracle Database 10g 中是類似的,您可能要問,在什麼情況下,FGA 將是更好的選擇?好的,讓我們研究一下它們的差異。


標準審計必須用引數 AUDIT_TRAIL 在資料庫級啟用。這個引數不是動態的;您必須重啟資料庫來使其生效。相比而言,FGA 不需要任何引數修改。


一旦被設定在一個物件上,標準審計將保持在那裡。要解除它,您必須用 NOAUDIT 命令刪除審計選項。這可能很不方便,因為在一個表上丟棄審計選項也將丟棄後設資料資訊。然而,FGA 可以臨時禁用和啟用,不丟失任何後設資料資訊。


FGA 只能夠處理四種型別的語句:SELECT、INSERT、UPDATE 和 DELETE。相比而言,常規審計可以處理其它許多語句和許可權,甚至會話連線和斷開。


標準審計每次會話只建立一條記錄(按會話)或每次訪問物件建立一條記錄(按訪問)這種佔用資源很少的方式對於控制審計線索表中的空間非常重要。FGA 並不是同樣節省資源;它每次訪問執行一次 — 使得線索更大。


透過記錄線索,標準審計可以用來檢測任何中斷企圖,如果企圖沒有成功,則將產生錯誤程式碼。而 FGA 不能。


標準審計可以寫資料庫表或 OS 檔案。後者在審計員(不是資料庫管理員)能夠訪問線索時非常有用。在 Windows 下,非資料庫審計線索記錄在事件日誌中,並且可以用不同的方式對其進行訪問。這個選項保護了審計線索的完整性。然而,FGA 日誌僅寫到資料庫表 FGA_LOG$ 中。您可以在 FGA 中建立使用者自定義的審計處理程式來寫 OS 檔案,但它們的完整性不能保證。


標準審計可以設定用於預設物件。當表是在執行期建立時,這個功能變得極為有用:預設的審計選項允許沒有資料庫管理員干預的審計。這在 FGA 中是不可能的,使用者必須在一個現有的表上建立策略,上述的情況只能在表已建立之後才可能發生。


在 FGA 中,審計更加靈活 — 僅當訪問某些列,當某個特定的條件為真時等等。這種多功能性在您需要控制線索的增長時非常方便。


在 FGA 中,SQL 賦值變數預設被捕獲。在常規審計中,必須把初始化引數 audit_trail設為 db_extended,以啟用這一功能。


許可權差異:常規審計需要審計系統或語句許可權;FGA 只需要 dbms_fga 程式包上的執行許可權。

透過上面的比較,您將瞭解為什麼可以證明 FGA 在某些情況下很有用。利用 Oracle Database 10g 中的增強的常規審計特性,一些以前認為不可能的任務 — 例如捕獲賦值變數的值 — 變得十分容易。

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

相關文章