轉載:Oracle10g新特性——審計

浪漫雙魚發表於2009-04-09
10g審計能力的提升
    Oracle 10g的審計會在非常細節的層次上捕捉使用者的動作,它可以是手動審計、基於觸發器審計。 

假如使用者A用以下語句更新了表裡面得一條記錄:

SQL> update SCOTT.EMP set salary = 12000 where empno = 123456;
     你如何去跟蹤這樣的操作呢?在Oracle 9i中,審計只捕捉了誰做了操作,但不知道他做了什麼?例如,它能讓你知道A更新過使用者scott的表emp,但是卻無法知道他更新了工號為123456的員工的薪水資訊。它同樣在改變欄位salary之前無法顯示處它的值——要捕捉這樣的資訊,你只能通過編寫自己的觸發器來在值改變前捕捉它,或者通過使用Log Miner(日誌挖掘器)從歸檔日誌中找出來。

    這兩種方式都會讓你付出較大代價來跟蹤和記錄數值的變化。使用觸發器記錄統計資訊會造成很大的效能壓力。處於效能考慮,在一些情況下(如在三層構架應用中)會禁止使用使用者自定義的觸發器。日誌挖掘器不會產生效能問題,但它必須依賴於歸檔日誌功能已經啟動。

    在Oracle 9i中出現的細密紋理審計(Fine-grained Auditing FGA),可以同SCN數重新構造老的資料來記錄更低層次的變化,但是它只針對select查詢,無法記錄update、insert和delete這些DML語句。因此,在oracle 10g之前,使用觸發器是唯一可以用來跟蹤使用者在低層次上做的資料操作的途徑。

    隨著10g的帶來了在審計方面的兩個顯著變化,這些限制將全都沒有了。因為引入了兩種型別的審計——標準審計(所有版本都有)和細密紋理審計(Oracle 9i和以上版本才具備)。我們分別來了解他們,看看它們如何通過互補來提供一個單一的、強大的跟蹤能力。

新功能

   首先,FGA現在提供了除select以為的DML審計。這些變化記錄還是儲存在同一個地方:FGA_LOG$,並且可以通過檢視DBA_FGA_AUDIT_TRAIL查詢到。除了DML語句外,你還可以選擇使用觸發器跟蹤所有相關的欄位或者只是其中的一小部分。

    通過命令AUDIT執行的標準審計能夠很容易的跟蹤某個特殊物件。例如,你需要跟蹤使用者scott的表EMP上的所有更新操作,可以用以下命令:

SQL> AUDIT UPDATE on scott.emp BY ACCESS;
     這一命令會在任意一個使用者更新scott.emp表時記錄在審計跟蹤表AUD$中,並通過DBA_AUDIT_TRAIL檢視可以查詢。

    這一功能在10g以前的版本中也有。但是在哪些版本中,寫入的跟蹤資訊僅限於一小部分相關資訊,如執行操作的使用者,時間,終端ID等。而哪些修改的值這樣的重要資訊卻沒有記錄。在10g中,除了以前版本記錄的哪些資訊以外,還記錄了很多這種重要資訊。審計的主要表AUD$增加了幾個欄位來記錄這些資訊,相應的的檢視的DBA_AUDIT_TRAIL也增加了這些欄位以便查詢。讓我們再深入瞭解一下。

    EXTENDED_TIMESTAMP 這一欄位用TMESTAMP(6)的格式記錄了審計記錄的時間戳,它以格林尼治時間(UTC)記錄到了秒的第9位小數以後的時間以及相應的時區資訊,下面時一個例子:

2004-3-13 18.10.13.123456000 -5:0

    這意味著時間在美國東部標準時間2004年3月13日,時區比UTC完5個小時。這一擴充套件格式的時間在一個精確得多得精度上記錄了審計跟蹤時間,對於哪些資料庫時間存在時區差得系統來說非常有用。

    GLOBAL_UID和PROXY_SESSIONID 當要鑑別一個用於鑑權的管理元件如Oracle Internet Directory時,使用者在資料庫中可能以不同的形式可見。例如,他們可能作為一個企業使用者鑑權進入資料庫。審計這些使用者時將無法在檢視DBA_AUDIT_TRAIL的欄位USERNAME中記錄他們的企業userid,這樣記錄下來的資訊是無用的。在Oracle 10g中,如果沒有進一步的操作或設定,全域性(或企業)使用者會被唯一的記錄在欄位GLOBAL_UID中。這一欄位可以被用於查詢目錄伺服器以找出這個企業使用者的完整資訊。

    有時候企業使用者需要通過一個代理使用者連線資料庫,特別是在多點應用時。一個使用者可以通過以下方式授予代理許可權:

SQL> alter user scott grant connect to appuser;
    這一命令將使使用者scott可以最為appuser連線資料庫,成為一個代理使用者。在這一例子中,欄位COMMENT_TEXT將通過存入值PROXY來記錄下scott作為代理使用者的情況。但在9i中,代理使用者的會話ID不會記錄下來。在10g中,欄位PROXY_SESSIONID記錄下來代理使用者的session id。

    INSTANCE_NUMBER 在Oracle RAC環境中,能夠知道使用者從哪個例項連上資料庫會比較有用。在10G中,這個欄位就記錄了例項初始化引數設定的唯一的例項號。

    OS_PROCESS 在9i及以下版本中,審計跟蹤記錄中只會記錄SID,而不會記錄作業系統的程式ID。但是作業系統程式ID對於以後對照trace檔案是非常必要的。在10g中,這個欄位就記錄了作業系統程式id。

    TRANSACTIONID 這是一個極其重要的資訊。加入使用者執行了以下語句:

SQL> update CLASS set size = 10 where class_id = 123; SQL> commit;

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

相關文章