Oracle提供了審計工具,用於跟蹤、記錄、統計資料庫活動的方方面面!——sqlserver似乎還沒有該功能!
Oracle的審計功能三大類
- 利用初始化參數控制的:資料庫內建審計
- 利用dbms_fga提供的:表、視圖的精細審計
- 利用觸發器實現的:強大、複雜、靈活的 應用審計
下面介紹資料庫內建審計功能
預設情況下:oracle不啟用Database Audit功能。Oracle只記錄資料庫的基本活動,可以通過windows的事件檢視器查看審計記錄聊——這時候所提供的資訊是一般的windows服務所必須提供的資訊。沒有oracle的主動審計工作在裡面。(這時候的oracle把基本活動記錄在想關的日誌中:錯誤、跟蹤、後台、使用者等)
- audit_sys_operations={false(預設:不啟用特權使用者的審計)|true}
- audit_trail={none(預設:不啟用普通使用者的審計)|os|db|db_extended|xml|xml_extended}
設定審計audit:需要audit system、audit any許可權。
- audit {all | sqlstatment....} [by {all users | user....| proxy....}] [by {session | access}] [whenever { all | successful | not successful}]
- audit {all privileges | role.... | system_privileges....} [by {all users | user....| proxy....}] [by {session | access}] [whenever { all | successful | not successful}]
- audit {all | object_options....} on { default | directory directory_name | [schema.] object} [by {session | access}] [whenever { all | successful | not successful}]
- audit network [by {session | access}] [whenever { all | successful | not successful}]
- 注意:只有對象審計是立即生效的,其他的審計只對將來的會話生效!
停止審計noaudit:許可權需求同audit ,定義形式相同——除了沒有 [by {session | access}] 子定義
注意:noaudit必須和也只能取消之前定義完全相同的audit語句,並不會取消所有或指定的類,其他的audit會繼續進行
審計推薦
- by access 可以審計每一次執行,對於dml來說:by session 對同一會話內相同的dml語句只記錄一次審計記錄是不合適的!
- by user 可以只審計某個、某些使用者的,比較實用
查詢審計資訊:dba_audit_trail字典表。審計紀律記錄在sys.aud$fixed表裡,可以通過查詢dba_audit_trail資料字典表擷取資訊
- dba_audit_xxx:審核的記錄細節資訊
- dba_stmt_audit_opts:語句審核設定
- dba_priv_audit_opts:許可權審核設定
- dba_obj_audit_opts:對象審核設定