【審計】標準資料庫審計

不一樣的天空w發表於2016-10-21
審計(Audit)用於監視使用者所執行的資料庫操作,並且Oracle會將審計跟蹤結果存放到OS檔案
(預設位置為$ ORACLE_BASE/admin/$ORACLE_SID/adump/)或資料庫(儲存在system表空間中的
SYS.AUD$表中,可透過檢視 dba_audit_trail檢視)中。預設情況下審計是沒有開啟的。

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

和審計相關的兩個主要引數:
1.audit_sys_operations:預設為false,當設定為true時,所有sys使用者(包括以sysdba,sysoper身份登入的使用者)
的操作都會被記錄,audit trail不會寫在aud$表中,這個很好理解,如果資料庫還未啟動aud$不可用,
那麼像conn /as sysdba這樣的連線資訊,只能記錄在其它地方。如果是windows平臺,audti trail會記錄在windows的
事件管理中,如果是linux/unix平臺則會記錄在audit_file_dest引數指定的檔案中。
2.audit_trail:None:是10g預設值,不做審計;11g預設值DB,將審計結果記錄到aud$表中;

審計:
.1 強制性審計
啟停資料庫等動作,都記錄在了 alert 日誌中,這些就是強制審計,是 oracle 自動開啟的。

.2 標準資料庫審計
show parameter audit_trail

.3 基於值審計
這個是透過我們自己編寫的觸發器來完成的。

.4 細粒度審計 (FGA)
可以針對某一列進行更細緻的審計

.5 DBA 審計
安全管理員對 DBA 的審計

標準資料庫審計
- 審計語法:
audit sql_statement_clause by {session | access} whenever [not] successful;
by session在一個會話中同型別的操作只審計一條
by access每個符合審計的操作全部審計
- 審計相關引數 audit_trail):
audit_trail = { none | os | db [, extended] | xml [, extended] }
none10g 預設值,不做審計;
os:將 audit trail 記錄在作業系統檔案中,檔名由 audit_file_dest 引數指定;
db11g 預設值將審計結果記錄到 aud$中;
db,extended:將審計結果記錄到 aud$中,同時包括繫結變數及 CLOB 欄位
xml:記錄 OS 檔案的是 XML 格式的審計記錄;
xml,extended:記錄OS 檔案的是 XML 格式的審計記錄,同時包括繫結變數及 CLOB 欄位

oracle10g
:預設審計引數NONE,即未開啟

Oracle11g:預設審計引數DB

 
實驗開始:

——檢視審計是否開啟: DB表示為11g預設引數)

SYS@ORA11GR2>show parameter audit_trail

 

NAME                                 TYPE        VALUE

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

audit_trail                          string          DB

 

注:儲存審計資訊的表( aud$)的預設表空間為 system system 表空間是不建議用的,所以最好為表aud$單獨建立一個表空間用於儲存審計資料。


——驗證:

SYS@ORA11GR2>select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='AUD$';

 

TABLE_NAME                     TABLESPACE_NAME

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

AUD$                           SYSTEM

 

1) 建立 ts_audit 表空間,用於儲存審計資訊

SYS@ORA11GR2>create tablespace ts_audit datafile '/u01/app/oracle/oradata/ORA11GR2/ts_audit_01.dbf' size 10m autoextend on next 10m;

 

Tablespace created.

 

2) 儲存審計資訊的表 move ts_audit 表空間

SYS@ORA11GR2>alter table aud$ move tablespace ts_audit;

 

Table altered.

——驗證:

SYS@ORA11GR2>select TABLE_NAME,TABLESPACE_NAME from user_tables where table_name='AUD$';

 

TABLE_NAME                     TABLESPACE_NAME

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

AUD$                           TS_AUDIT

考慮將 aud$ clob 欄位單獨儲存一個表空間,如下
alter table sys.aud$ move lob(sqlbind) store as( tablespace USERS);
alter table sys.aud$ move lob(SQLTEXT) store as( tablespace USERS);
oracle10g
中,還可以考慮將索引 move 一個新的表空間, oracle11g aud$表已無索引
alter index sys.I_AUD1 rebuild tablespace users;


3) 檢視審計引數並對其修改,改為儲存到資料庫記錄繫結變數

--檢視當前資料庫中引數 audit_trail 的值

SYS@ORA11GR2>show parameter audit_trail

 

NAME                                 TYPE        VALUE

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

audit_trail                          string      DB

 

--修改為審計記錄儲存到資料庫中並且包含 clob 欄位

SYS@ORA11GR2>alter system set audit_trail=db,extended scope=spfile;

 

System altered.

 

SYS@ORA11GR2>startup force;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance

ORACLE instance started.

 

Total System Global Area  830930944 bytes

Fixed Size                  2257800 bytes

Variable Size             503319672 bytes

Database Buffers          322961408 bytes

Redo Buffers                2392064 bytes

Database mounted.

Database opened.

——驗證:

SYS@ORA11GR2>show parameter audit_trail

 

NAME                                 TYPE        VALUE

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

audit_trail                          string      DB, EXTENDED

 

4) 登入 scott 使用者,建立 t 表並開啟 update 審計,使用 by access 子句,每次 update 都審計

SCOTT@ORA11GR2>create table t(x int);

 

Table created.

 

SCOTT@ORA11GR2>insert into t values(9);

 

1 row created.

 

SCOTT@ORA11GR2>commit;

 

Commit complete.

——在scott使用者下對t表進行access級別的審計

SCOTT@ORA11GR2>audit update on t by access表示對t表的每次更新操作進行審計

by access每個符合審計的操作全部審計;by session在一個會話中同型別的操作只審計一條)

Audit succeeded.

 

5) 使用繫結變數的 sql 進行 update 測試

SCOTT@ORA11GR2>var v_num number;

SCOTT@ORA11GR2>exec :v_num:=1000;   (:v_num繫結變數,:v_num:=給繫結變數授予一個值)


PL/SQL procedure successfully completed.

 

SCOTT@ORA11GR2>update t set x=:v_num;

 

1 row updated.

 

SCOTT@ORA11GR2>commit;

 

Commit complete.

 

6) 返回 sys 賬戶,驗證結果

SYS@ORA11GR2>select username,sql_text,sql_bind from dba_audit_trail where sql_text='update t set x=:v_num';

 

USERNAME   SQL_TEXT                  SQL_BIND

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

SCOTT      update t set x=:v_num      #1(4):1000

 

7) 另: sql 語句中&變數非繫結變數,在審計表中也可以清晰的看出來

SYS@ORA11GR2>conn scott/tiger

Connected.

SCOTT@ORA11GR2>select * from t;

 

         X

----------

      1000

 

SCOTT@ORA11GR2>update t set x=&val;

Enter value for val: 9

old   1: update t set x=&val

new   1: update t set x=9

 

1 row updated.

 

SCOTT@ORA11GR2>commit;

 

Commit complete.

 

——檢視:

SCOTT@ORA11GR2>conn / as sysdba

SYS@ORA11GR2>select username,sql_text,sql_bind from dba_audit_trail where sql_text like 'update t set x=%';

 

USERNAME   SQL_TEXT                  SQL_BIND

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

SCOTT      update t set x=:v_num      #1(4):1000

SCOTT      update t set x=9

 

8) 取消審計(取消語句無需寫 by access 子句)

SYS@ORA11GR2>conn scott/tiger

Connected.

SCOTT@ORA11GR2>noaudit update on t;

 

Noaudit succeeded.

實驗結束!!!!!!!!


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

相關文章