ORACLE審計簡介

來源:互聯網
上載者:User

1、什麼是審計

審計(Audit)用於監視使用者所執行的資料庫操作,並且Oracle會將審計跟蹤結果存放到OS檔案(預設位置為$ORACLE_BASE/admin/

$ORACLE_SID/adump/)或資料庫(儲存在system資料表空間中的SYS.AUD$表中,可通過視圖dba_audit_trail查看)中。預設情況下審計是沒有 開啟的。

不管你是否開啟資料庫的審計功能,以下這些作業系統會強制記錄:用管理員權限串連Instance;啟動資料庫;關閉資料庫。

2、和審計相關的兩個主要參數

Audit_sys_operations:

預設為false,當設定為true時,所有sys使用者(包括以sysdba,sysoper身份登入的使用者)的操作都會被記錄,audit trail不會寫在aud$表

中,這個很好理解,如果資料庫還未啟動aud$不可用,那麼像conn /as sysdba這樣的串連資訊,只能記錄在其它地方。如果是windows平台 ,audti trail會記錄在windows的事件管理中,如果是linux/unix平台則會記錄在audit_file_dest參數指定的檔案中。

Audit_trail:

None:是預設值,不做審計;

DB:將audit trail 記錄在資料庫的審計相關表中,如aud$,審計的結果只有串連資訊;

DB,Extended:這樣審計結果裡面除了串連資訊還包含了當時執行的具體語句;

OS:將audit trail 記錄在作業系統檔案中,檔案名稱由audit_file_dest參數指定;

XML:10g裡新增的。

註:這兩個參數是static參數,需要重新啟動資料庫才會生效。

3、審計層級

當開啟審計功能後,可在三個層級對資料庫進行審計:Statement(語句)、Privilege(許可權)、object(對象)。

Statement:

按語句來審計,比如audit table 會審計資料庫中所有的create table,drop table,truncate table語句,alter session by cmy會審計

cmy使用者所有的資料庫連接。

Privilege:

按許可權來審計,當使用者使用了該許可權則被審計,如執行grant select any table to a,當執行了audit select any table語句後,當使用者a

訪問了使用者b的表時(如select * from b.t)會用到select any table許可權,故會被審計。注意使用者是自己表的所有者,所以使用者訪問自

己 的表不會被審計。

Object:

按對象審計,只審計on關鍵字指定對象的相關操作,如aduit alter,delete,drop,insert on cmy.t by scott; 這裡會對cmy使用者的t表進行

審計,但同時使用了by子句,所以只會對scott使用者發起的操作進行審計。注意Oracle沒有提供對schema中所有對象的審計功能,只能一個 一個對象審計,對於後面建立的對象,Oracle則提供on default子句來實現自動審計,比如執行audit drop on default by access;後,  對於隨後建立的對象的drop操作都會審計。但這個default會對之後建立的所有資料庫物件有效,似乎沒辦法指定只對某個使用者建立的對象 有效,想比trigger可以對schema的DDL進行“審計”,這個功能稍顯不足。

4、審計的一些其他選項

by access / by session:

by access 每一個被審計的操作都會產生一條audit trail。

by session 一個會話裡面同類型的操作只會產生一條audit trail,預設為by session。

whenever [not] successful:

whenever successful 操作成功(dba_audit_trail中returncode欄位為0) 才審計,

whenever not successful 反之。省略該子句的話,不管操作成功與否都會審計。

5、和審計相關的視圖

dba_audit_trail:儲存所有的audit trail,實際上它只是一個基於aud$的視圖。其它的視圖

dba_audit_session,dba_audit_object,dba_audit_statement都只是dba_audit_trail的一個子集。

dba_stmt_audit_opts:可以用來查看statement審計層級的audit options,即資料庫設定過哪些statement層級的審計。

dba_obj_audit_opts,dba_priv_audit_opts視圖功能與之類似

all_def_audit_opts:用來查看資料庫用on default子句設定了哪些預設對象審計。

6、取消審計

將對應審計語句的audit改為noaudit即可,如audit session whenever successful對應的取消審計語句為noaudit session whenever  

successful;

7、10g中的審計告知一切

Oracle 資料庫 10g 審計以一種非常詳細的層級捕獲使用者行為,它可以消除手動的、基於觸發器的審計。

假定使用者 Joe 具有更新那張表的許可權,並按如下所示的方式更新了表中的一行資料:

update SCOTT.EMP set salary = 12000 where empno = 123456;

您如何在資料庫中跟蹤這種行為呢?在 Oracle 9i 資料庫及其較低版本中,審計只能捕獲“誰”執行此操作,而不能捕獲執行了“什麼”

內容。例如,它讓您知道 Joe 更新了 SCOTT 所有的表EMP,但它不會顯示他更新了該表中員工號為 123456 的薪水列。它不會顯示更改前 的薪水列的值 — 要捕獲如此詳細的更改,您將不得不編寫您自己的觸發器來捕獲更改前的值,或使用 LogMiner 將它們從存檔日誌中檢索 出來。

細粒度審計(FGA) ,是在 Oracle 9i 中引入的,能夠記錄 SCN 號和行級的更改以重建舊的資料,但是它們只能用於 select 語句,而不能 用於 DML ,如 update 、insert 和delete 語句。因此,對於 Oracle 資料庫 10g 之前的版本,使用觸發器雖然對於以行級跟蹤使用者初始 的更改是沒有吸引力的選擇,但它也是唯一可靠的方法。

8、執行個體講解

8.1、啟用審計

sqlplus / as sysdba

SQL> show parameter audit

NAME                                 TYPE        VALUE

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

查看本欄目更多精彩內容:http://www.bianceng.cnhttp://www.bianceng.cn/database/Oracle/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.