Oracle的審計是一個事后的工作残制,即數(shù)據(jù)庫出現(xiàn)安全問題后雹锣,為了定位、發(fā)現(xiàn)問題的根源心软,可以通過審計追根溯源壕吹。Oracle審計主要包含以下3個部分:
Trigger-based Auditing(觸發(fā)器)
Auditing the sys User-(SYS用戶審計)
Standard Auditing (標(biāo)準(zhǔn)審計)
觸發(fā)器審計
下面是一個觸發(fā)器審計的例子,一旦emp表的sal字段的值增大超過1.1倍删铃,就在審計表emp_sal_audit里記錄該次操作耳贬。
CREATE TRIGGER trg_a_idu_r_emp_sal
AFTER INSERT OR DELETE OR UPDATE OF sal ON emp
FOR EACH ROW
BEGIN
IF (:NEW.sal > :OLD.sal * 1.10)
THEN INSERT INTO emp_sal_audit VALUES (:OLD.empno
,:OLD.sal
,:NEW.sal
,user
,sysdate);
END IF;
END;
/
SYS用戶的審計
對SYS用戶的審計比較特殊,因為SYS用戶的權(quán)限太大猎唁,它的審計信息不能存儲在數(shù)據(jù)庫里咒劲,否則SYS可以隨意修改審計信息,因此sys用戶審計日志寫到操作系統(tǒng)日志中。
下面是一個例子:
1)首先啟動對SYS用戶的審計
SQL> alter system set audit_sys_operations = true scope = spfile;
系統(tǒng)已更改腐魂。
2)由SYS用戶向測試表插入一條數(shù)據(jù)
SQL> show user
USER 為 "SYS"
SQL> insert into test.t (object_id) values(1);
已創(chuàng)建 1 行帐偎。
SQL> commit;
提交完成。
3)在操作系統(tǒng)日志中可以看到如下信息:
Audit trail: LENGTH : '176' ACTION :[7] 'CONNECT' DATABASE USER:[1] '/' PRIVILEGE :[6] 'SYSDBA' CLIENT USER:[12] 'CORP\xianzhu' CLIENT TERMINAL:[14] 'L-SHC-00436132' STATUS:[1] '0' DBID:[10] '1327298419' .
標(biāo)準(zhǔn)審計
標(biāo)準(zhǔn)審計根據(jù)對象不同蛔屹,可以分為以下4個部分:
審計會話
審計對象
審計操作
審計授權(quán)
下面以審計對象為例:
1)首先削樊,開啟標(biāo)準(zhǔn)審計
SQL> ALTER SYSTEM SET AUDIT_TRAIL = DB,EXTENDED SCOPE = SPFILE;
系統(tǒng)已更改。
SQL> audit select, insert, update, delete on test.t;
審計已成功兔毒。
2)在表上做DML操作
SQL> delete from test.t;
已刪除72768行漫贞。
SQL> insert into t (object_id) values(1);
已創(chuàng)建 1 行。
SQL> commit;
提交完成育叁。
3)在審計表里查看相應(yīng)審計信息
SQL> col userid for a10
SQL> col obj$name for a10
SQL> col sqltext for a40
SQL> select userid,obj$name,sqltext from sys.aud$ where userid='TEST' and obj$name='T';
USERID? ? OBJ$NAME? SQLTEXT
---------- ---------- ----------------------------------------
TEST? ? ? T? ? ? ? ? delete from test.t
TEST? ? ? T? ? ? ? ? insert into t (object_id) values(1)
步驟
第1步:查看審計功能是否開啟迅脐?
SQL> show parameter audit;
NAME?????????????????????????????????TYPE????????VALUE
------------------------------------ ----------- ------------------------------
audit_file_dest???????????????????string??????/u01/app/oracle/admin/ORCL/adump
audit_sys_operations??????boolean?????FALSE
audit_syslog_level????????????string
audit_trail????????????????????????? ??string??????NONE
audit_trail 的value值為NONE表示不開啟;
audit_trail 的value值為FALSE表示不開啟擂红;
audit_trail 的value值為DB表示開啟仪际;
audit_trail 的value值為TURE表示開啟;
audit_trail 的value值為OS表示審計記錄寫入一個操作系統(tǒng)文件(不是特別理解)昵骤;
第2步:開啟審計功能
SQL> alter system set audit_sys_operations=TRUE scope=spfile;--審計管理用戶(以sysdba/sysoper角色登陸)
SQL> alter system set audit_trail=db,extended scope=spfile;
重啟實例
第3步:關(guān)閉審計功能
SQL> conn /as sysdba
SQL> show parameter audit
SQL> alter system set audit_trail = none?scope=spfile;
重啟實例
Oracle使用大量不同的審計方法來監(jiān)控使用何種權(quán)限树碱,以及訪問哪些對象。審計不會防止使用這些權(quán)限变秦,但可以提供有用的信息成榜,用于揭示權(quán)限的濫用和誤用。
審計類型說明
語句審計? ? ?按照語句類型審計SQL語句蹦玫,而不論訪問何種特定的模式對象赎婚。也可以在數(shù)據(jù)庫中指定一個或多個用戶,針對特定的語句審計這些用戶
權(quán)限審計? ? ?審計系統(tǒng)權(quán)限樱溉,例如CREATE TABLE或ALTER INDEX挣输。和語句審計一樣,權(quán)限審計可以指定一個或多個特定的用戶作為審計的目標(biāo)
模式對象審計? ? ?審計特定模式對象上運行的特定語句(例如福贞,DEPARTMENTS表上的UPDATE語句)撩嚼。模式對象審計總是應(yīng)用于數(shù)據(jù)庫中的所有用戶
細粒度的審計? ? 根據(jù)訪問對象的內(nèi)容來審計表訪問和權(quán)限。使用程序包DBMS_FGA來建立特定表上的策略
audit_sys_operations:
默認為false挖帘,當(dāng)設(shè)置為true時完丽,所有sys用戶(包括以sysdba,sysoper身份登錄的用戶)的操作都會被記錄,audit trail不會寫在aud$表中拇舀,這個很好理解逻族,如果數(shù)據(jù)庫還未啟動aud$不可用,那么像conn /as sysdba這樣的連接信息骄崩,只能記錄在其它地方聘鳞。如果是windows平臺薄辅,audti trail會記錄在windows的事件管理中,如果是linux/unix平臺則會記錄在audit_file_dest參數(shù)指定的文件中搁痛。
audit_trail:
None:是默認值长搀,不做審計;
DB:將audit trail 記錄在數(shù)據(jù)庫的審計相關(guān)表中鸡典,如aud$源请,審計的結(jié)果只有連接信息;
DB,Extended:這樣審計結(jié)果里面除了連接信息還包含了當(dāng)時執(zhí)行的具體語句彻况;
OS:將audit trail 記錄在操作系統(tǒng)文件中谁尸,文件名由audit_file_dest參數(shù)指定;
XML:10g里新增的纽甘。
10g Values:
none
Disables database auditing.
os
Enables database auditing and directs all audit records to the operating system's audit trail.
db
Enables database auditing and directs all audit records to the database audit trail (theSYS.AUD$table).
db,extended
Enables database auditing and directs all audit records to the database audit trail (theSYS.AUD$table). In addition, populates theSQLBINDandSQLTEXTCLOB columns of theSYS.AUD$table.
xml
Enables database auditing and writes all audit records to XML format OS files.
xml,extended
Enables database auditing and prints all columns of the audit trail, including SqlText and SqlBind values.
注: 參數(shù)AUDIT_TRAIL不是動態(tài)的良蛮,為了使AUDIT_TRAIL參數(shù)中的改動生效,必須關(guān)閉數(shù)據(jù)庫并重新啟動悍赢。在對SYS.AUD$表進行審計時决瞳, 應(yīng)該注意監(jiān)控該表的大小,以避免影響SYS表空間中其他對象的空間需求左权。推薦周期性歸檔SYS.AUD$中的行皮胡,并且截取該表。Oracle提供了角色 DELETE_CATALOG_ROLE赏迟,和批處理作業(yè)中的特殊賬戶一起使用屡贺,用于歸檔和截取審計表。
audit_file_dest:Audit_trail=OS時 文件位置
審計的觸發(fā)條件
?根據(jù)語句執(zhí)行是否成功進行審計
不管是語句锌杀,權(quán)限和對象都可以根據(jù)語句執(zhí)行是否成功在審計語句后面加判斷詞甩栈,語法如下:
在審計語句后面加WHENEVER SUCCESSFUL or WHENEVER NOT SUCCESSFUL
如:
AUDIT CREATE TABLE WHENEVER NOT SUCCESSFUL;
AUDIT TRUNCATE TABLE WHENEVER NOT SUCCESSFUL;
根據(jù)指定用戶進行審計
在做語句和權(quán)限進行審計的時候可以在審計語句后面加by再加指定用戶名,多個用戶用逗號隔開糕再,例如下面語句為開啟對scott,blake兩個用戶的所有select table和update table權(quán)限
AUDIT SELECT TABLE, UPDATE TABLE? BY scott, blake;
AUDIT SELECT TABLE, UPDATE TABLE? BY scott, blake;
審計相關(guān)的視圖
可以通過dba_views查看所有相關(guān)的視圖
select * from dba_views where view_name like '%AUDIT%'
最常用的視圖如下:
---審計系統(tǒng)視圖
select? *? from? STMT_AUDIT_OPTION_MAP? ? -- 審計選項類型代碼
select? *? from? AUDIT_ACTIONS? ? -- action代碼
select? *? from? ALL_DEF_AUDIT_OPTS? ? -- 對象創(chuàng)建時默認的對象審計選項
---三種審計已啟用審計選項
select? *? from? DBA_STMT_AUDIT_OPTS? ? -- 當(dāng)前數(shù)據(jù)庫系統(tǒng)審計選項
select? *? from? DBA_PRIV_AUDIT_OPTS? ? -- 當(dāng)前權(quán)限審計選項
select? *? from? DBA_OBJ_AUDIT_OPTS? ? ---查看當(dāng)前審計了哪些對象
---審計結(jié)果,也可以直接查詢sys.aud$表
select? *? from? DBA_AUDIT_TRAIL? ---查看審計記錄,調(diào)用的sys.aud$表
select? *? from? DBA_AUDIT_OBJECT? ---查看對象審計記錄
select? *? from? DBA_AUDIT_SESSION? -- session審計記錄
select? *? from? DBA_AUDIT_STATEMENT? -- 查看語句審計記錄
select? *? from? DBA_AUDIT_EXISTS? ? -- 使用BY AUDIT NOT EXISTS選項的審計
select? *? from? DBA_AUDIT_POLICIES? ? -- 審計POLICIES
select? *? from? DBA_COMMON_AUDIT_TRAIL? -- 標(biāo)準(zhǔn)審計+精細審計記錄