文章目錄
- 開啟數據庫審計(db,extended級別或os級別),并將審計文件存放到/home/oracle/audit下
- 一. 簡介
- 二. 配置
- 2.1. 審計是否安裝
- 2.2. 審計表空間遷移
- 2.3. 審計參數
- 2.4. 審計級別
- 2.5. 其他審計選項
- 2.6. 審計相關視圖
- 三. 使用
- 3.1. 開啟/關閉審計
- 3.2. 表操作審計
- 四.更改審計文件目錄
- 4.1.查看審計文件的配置路徑
- 4.2.更改配置路徑
- 4.3.重啟數據庫后查看路徑已變成/home/oracle/audit
開啟數據庫審計(db,extended級別或os級別),并將審計文件存放到/home/oracle/audit下
一. 簡介
審計(Audit)用于監視用戶所執行的數據庫操作,審計記錄可存在數據字典表(稱為審計記錄:存儲在system表空間中的 SYS.AUD 表中,可通過視圖 d b a a u d i t t r a i l 查看 ) 或操作系統審計記錄中 ( 默認位置為 表中,可通過視圖dba_audit_trail查看)或操作系統審計記錄中(默認位置為 表中,可通過視圖dbaa?uditt?rail查看)或操作系統審計記錄中(默認位置為ORACLE_BASE/admin/$ORACLE_SID/adump/).。默認情況下審計是沒有開啟的。
審計記錄包含有審計的操作、用戶執行的操作、操作的日期和時間等信息。
不管你是否打開數據庫的審計功能,以下這些操作系統會強制記錄:用管理員權限連接Instance;啟動數據庫;關閉數據庫。
二. 配置
2.1. 審計是否安裝
SQL> connect / AS SYSDBASQL> select * from sys.aud$; --沒有記錄返回SQL> select * from dba_audit_trail; - 沒有記錄返回
如果做上述查詢的時候發現表不存在,說明審計相關的表還沒有安裝,需要安裝, 安裝后要重啟數據庫
SQL> connect / as sysdbaSQL> @$ORACLE_HOME/rdbms/admin/cataudit.sql
2.2. 審計表空間遷移
審計表默認安裝在SYSTEM表空間。可以將相關表遷移到其他表空間
SQL>connect / as sysdba;SQL> alter table aud$ move tablespace new_tablespace;SQL> alter index I_aud1 rebuild online tablespace new_tablespace;SQL> alter table audit$ move tablespace new_tablespace;SQL> alter index i_audit rebuild online tablespace new_tablespace;SQL> alter table audit_actions move tablespace new_tablespace;SQL> alter index i_audit_actions rebuild online tablespace new_tablespace;
2.3. 審計參數
Audit_sys_operations:是否對sysdba用戶做審計 ,關于sysdba用戶審計的結果,linux存放在audit_file_dest參數指定位置的aud文件中,windows存放在事件查看器的系統日志中
Audit_trail:None:是默認值,不做審計;
DB:將audit trail 記錄在數據庫的審計相關表中,如aud$,審計的結果只有連接信息;
DB,Extended:這樣審計結果里面除了連接信息還包含了當時執行的具體語句;
OS:將audit trail 記錄在操作系統文件中,文件名由audit_file_dest參數指定;
XML:10g里新增的。
注:這兩個參數是static參數,需要重新啟動數據庫才能生效。
2.4. 審計級別
當開啟審計功能后,可在三個級別對數據庫進行審計: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進行“審計”,這個功能稍顯不足。
2.5. 其他審計選項
by access 每一個被審計的操作都會生成一條audit trail。
by session 一個會話里面同類型的操作只會生成一條audit trail,默認為by session。
whenever successful 操作成功(dba_audit_trail中returncode字段為0) 才審計,
whenever not successful 反之。省略該子句的話,不管操作成功與否都會審計。
2.6. 審計相關視圖
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子句設置了哪些默認對象審計。
三. 使用
3.1. 開啟/關閉審計
開啟審計
alter system set audit_sys_operations=TRUE scope=spfile;
alter system set audit_trail=db,extended scope=spfile;
關閉審計
alter system set audit_trail=none;
3.2. 表操作審計
設置審計內容
audit all by lyj by access;audit select table, update table, insert table, delete table by lyj by access;audit execute procedure by lyj by access;AUDIT DELETE ANY TABLE; --審計刪除表的操作AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL; --只審計刪除失敗的情況AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL; --只審計刪除成功的情況AUDIT DELETE,UPDATE,INSERT ON user.table by SYSTEM; --審計SYSTEM用戶對表user.table的delete,update,insert操作//如果在命令后面添加by user則只對user的操作進行審計,如果省去by用戶,則對系統中所有的用戶進行審計(不包含sys用戶).noaudit all on t_test; 撤銷審計truncate table aud$; 清空審計表內容
四.更改審計文件目錄
4.1.查看審計文件的配置路徑
4.2.更改配置路徑
SQL> alter system set audit_file_dest='home/oracle/audit' scope=spfile;
修改完查看文件還是之前的路徑,需要先重啟數據庫