轉載:Oracle10g新特性——審計
10g審計能力的提升
Oracle 10g的審計會在非常細節的層次上捕捉使用者的動作,它可以是手動審計、基於觸發器審計。
假如使用者A用以下語句更新了表裡面得一條記錄:
你如何去跟蹤這樣的操作呢?在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上的所有更新操作,可以用以下命令:
這一命令會在任意一個使用者更新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中。這一欄位可以被用於查詢目錄伺服器以找出這個企業使用者的完整資訊。
有時候企業使用者需要通過一個代理使用者連線資料庫,特別是在多點應用時。一個使用者可以通過以下方式授予代理許可權:
這一命令將使使用者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 這是一個極其重要的資訊。加入使用者執行了以下語句:
Oracle 10g的審計會在非常細節的層次上捕捉使用者的動作,它可以是手動審計、基於觸發器審計。
假如使用者A用以下語句更新了表裡面得一條記錄:
SQL> update SCOTT.EMP set salary = 12000 where empno = 123456;
這兩種方式都會讓你付出較大代價來跟蹤和記錄數值的變化。使用觸發器記錄統計資訊會造成很大的效能壓力。處於效能考慮,在一些情況下(如在三層構架應用中)會禁止使用使用者自定義的觸發器。日誌挖掘器不會產生效能問題,但它必須依賴於歸檔日誌功能已經啟動。
在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;
這一功能在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;
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;
這一操作產生了一個事務,並記錄一條審計記錄。但你如何知道記錄中實際記錄的是什麼呢?如果這條記錄是一個事務,這個欄位就記錄了事務的ID。你可以用它遇檢視FLASHBACK_TRANSACTION_QUERY連線查詢。下面就是一個例子:
SQL> select start_scn, start_timestamp,
2 commit_scn, commit_timestamp, undo_change#, row_id, undo_sql
3 from flashback_transaction_query
4 where xid = '';
除了哪些關於這個事務的統計資訊,如undo change#、rowid等等,10g中還記錄了迴歸事務變化的SQL語句在欄位UNDO_SQL中,記錄了迴歸影響的行的rowid在欄位ROW_ID中。
System Change Number (SCN) 最後,來看下記錄的變化前的資料。如何得到它呢。在9i的FGA中,這個資料可以通過閃回查詢得到。但是你必須首先從審計記錄的SCN欄位中中得到System Change Number (SCN)。執行以下命令:
這樣可以得到變化前的資料了。
擴充套件DB審計
我們最想得到的是:捕捉在標準審計中沒有記錄的使用者所執行的SQL語句和繫結的變數。通過設定一個引數可以進入10g的擴充套件審計,在引數檔案中寫入以下內容:
audit_trail = db_extended
這一設定啟用了在相應欄位中記錄SQL語句和繫結的變數的值。在早期版本中是沒有這一引數的。
什麼時候需要觸發器
避免錯誤 審計資料都是通過一個自治事務從源事務中從產生的。因此,及時源事務
已經回滾,它們還是會被提交。這有一個簡單的例子來說明這一點。加入我們已經設定在表CLASS上審計UPDATE操作。一個使用者執行一個SQL將SIZE資料從20更新到10,然後回滾事務,如下所示:
現在欄位SIZE的資料是20而不是10。儘管迴歸了,審計跟蹤還是會捕捉到這些變化。在某些情況下,我們並不希望它這樣做,特別是使用者回滾了很多事務。在這種情況下,你就需要在CLASS表上建一個觸發器捕捉僅事務提交時的變化。如果在表CLASS上有一個插入資料到使用者定義的審計跟蹤中的觸發器,當迴歸時審計跟蹤也會回滾。
捕捉變化前的資料 Oracle提供的審計跟蹤沒有記錄變化前後的資料。例如。上面的變化會產生一條審計記錄,記錄下SQL語句和變化時的SCN數,但是沒有變化前的資料(20)。這個資料可以通過使用SCN數從閃回查詢中獲取到,但是這依賴於必須能從回滾段中獲取到相應資訊。這些資訊能否獲取到就看引數undo_retention設定的大小了,如果在它設定的時間範圍內,之前的資料就可以獲取到。使用觸發器捕捉這個值就不需要依賴遇這個引數的設定了,可以隨時獲取到變化前的值。
統一審計跟蹤
由於FGA和標準審計捕捉的時類似型別的資訊。他們可以共同提供很多十分有用的資訊。Oracle 10g通過檢視DBA_COMMON_AUDIT_TRAIL將這些跟蹤資訊統一成一個統一的跟蹤資訊。它是通過UNION ALL將檢視DBA_AUDIT_TRAIL和DBA_FGA_AUDIT_TRAIL聯合起來。但是這兩個統計跟蹤資料還是有很大的不同的。
SQL> select start_scn, start_timestamp,
2 commit_scn, commit_timestamp, undo_change#, row_id, undo_sql
3 from flashback_transaction_query
4 where xid = '
除了哪些關於這個事務的統計資訊,如undo change#、rowid等等,10g中還記錄了迴歸事務變化的SQL語句在欄位UNDO_SQL中,記錄了迴歸影響的行的rowid在欄位ROW_ID中。
System Change Number (SCN) 最後,來看下記錄的變化前的資料。如何得到它呢。在9i的FGA中,這個資料可以通過閃回查詢得到。但是你必須首先從審計記錄的SCN欄位中中得到System Change Number (SCN)。執行以下命令:
SQL> select size from class as of SCN 123456 2 where where class_id = 123;
擴充套件DB審計
我們最想得到的是:捕捉在標準審計中沒有記錄的使用者所執行的SQL語句和繫結的變數。通過設定一個引數可以進入10g的擴充套件審計,在引數檔案中寫入以下內容:
audit_trail = db_extended
這一設定啟用了在相應欄位中記錄SQL語句和繫結的變數的值。在早期版本中是沒有這一引數的。
什麼時候需要觸發器
避免錯誤 審計資料都是通過一個自治事務從源事務中從產生的。因此,及時源事務
已經回滾,它們還是會被提交。這有一個簡單的例子來說明這一點。加入我們已經設定在表CLASS上審計UPDATE操作。一個使用者執行一個SQL將SIZE資料從20更新到10,然後回滾事務,如下所示:
SQL> update class set size = 10 where class_id = 123; SQL> rollback
捕捉變化前的資料 Oracle提供的審計跟蹤沒有記錄變化前後的資料。例如。上面的變化會產生一條審計記錄,記錄下SQL語句和變化時的SCN數,但是沒有變化前的資料(20)。這個資料可以通過使用SCN數從閃回查詢中獲取到,但是這依賴於必須能從回滾段中獲取到相應資訊。這些資訊能否獲取到就看引數undo_retention設定的大小了,如果在它設定的時間範圍內,之前的資料就可以獲取到。使用觸發器捕捉這個值就不需要依賴遇這個引數的設定了,可以隨時獲取到變化前的值。
統一審計跟蹤
由於FGA和標準審計捕捉的時類似型別的資訊。他們可以共同提供很多十分有用的資訊。Oracle 10g通過檢視DBA_COMMON_AUDIT_TRAIL將這些跟蹤資訊統一成一個統一的跟蹤資訊。它是通過UNION ALL將檢視DBA_AUDIT_TRAIL和DBA_FGA_AUDIT_TRAIL聯合起來。但是這兩個統計跟蹤資料還是有很大的不同的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/11088128/viewspace-586888/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle10g審計(轉)Oracle
- [轉載] Java7中增加的新特性Java
- Oracle審計(轉)Oracle
- Cilium Ingress 特性(轉載)
- about oracle10g rac(轉)Oracle
- 【轉】Spring Framework 5.0 新特性SpringFramework
- 【轉】http2 新特性HTTP
- Cilium Gateway API 特性(轉載)GatewayAPI
- oracle審計-細粒度(轉)Oracle
- 玩轉iOS開發:iOS 11 新特性《Layout的新特性》iOS
- 玩轉ES6新特性
- PHP 7.4 新特性 —— 預載入PHP
- Oracle10g釋放flash_recovery_area(轉)Oracle
- 玩轉iOS開發:iOS 10 新特性《UserNotifications》iOS
- Oracle10g/11g動態、靜態關閉DRM特性方法Oracle
- MQTT 5.0 新特性 |(一) 屬性與載荷MQQT
- 玩轉iOS開發:iOS 8 新特性《Share Extension》iOS
- 玩轉iOS開發:iOS 10 新特性《Xcode Extension》iOSXCode
- 新特性
- (轉)Rustls 完成第三方安全審計RustTLS
- ubuntu環境下掛載新硬碟(轉載)Ubuntu硬碟
- DM7審計之物件審計物件
- 玩轉iOS開發:iOS 11 新特性《高階拖放》iOS
- 使用grep命令,玩轉程式碼審計尋找Sink
- React 新特性React
- 新特性介面
- Hadoop新特性Hadoop
- Oracle 23C Free下載安裝及新特性Oracle
- 新發專案有必要做程式碼審計嗎?
- Java8 新特性 —— Stream 流式程式設計Java程式設計
- 19C新特性研究實時統計
- DM7審計之語句序列審計
- DM7審計之語句級審計
- Java程式設計基礎28——反射&JDK新特性Java程式設計反射JDK
- 【新特性速遞】表格的客戶端合計客戶端
- Java程式碼審計篇 - ofcms系統審計思路講解 - 篇4 - XXE漏洞審計Java
- Java 11新特性Java
- Java 8 新特性Java
- Android 9.0新特性Android