您好,登錄后才能下訂單哦!
本篇文章給大家分享的是有關(guān)ORACLE數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)審計(jì)是怎么樣的,小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話不多說(shuō),跟著小編一起來(lái)看看吧。
1、什么是審計(jì)
審計(jì)(Audit)用于監(jiān)視用戶(hù)所執(zhí)行的數(shù)據(jù)庫(kù)操作,并且Oracle會(huì)將審計(jì)跟蹤結(jié)果存放到OS文件(默認(rèn)位置為$ORACLE_BASE/admin/$ORACLE_SID/adump/)或數(shù)據(jù)庫(kù)(存儲(chǔ)在system表空間中的 SYS.AUD$表中,可通過(guò)視圖dba_audit_trail查看)中。默認(rèn)情況下審計(jì)是沒(méi)有開(kāi)啟的。
不管你是否打開(kāi)數(shù)據(jù)庫(kù)的審計(jì)功能,以下這些操作系統(tǒng)會(huì)強(qiáng)制記錄:用管理員權(quán)限連接Instance;啟動(dòng)數(shù)據(jù)庫(kù);關(guān)閉數(shù)據(jù)庫(kù)。
2、和審計(jì)相關(guān)的兩個(gè)主要參數(shù)
AUDIT_SYS_OPERATIONS
AUDIT_SYS_OPERATIONS enables or disables the auditing of operations issued by user SYS, and users connecting with SYSDBA or SYSOPER privileges. The audit records are written to the operating system's audit trail. The audit records will be written in XML format if the AUDIT_TRAIL initialization parameter is set to XML.
AUDIT_TRAIL
AUDIT_TRAIL enables or disables database auditing.
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 (the SYS.AUD$ table).
db,extended
Enables database auditing and directs all audit records to the database audit trail (the SYS.AUD$ table). In addition, populates the SQLBIND and SQLTEXT CLOB columns of the SYS.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.
You can use the SQL statement AUDIT to set auditing options regardless of the setting of this parameter.
注:這兩個(gè)參數(shù)是static參數(shù),需要重新啟動(dòng)數(shù)據(jù)庫(kù)才能生效。
3、審計(jì)級(jí)別
當(dāng)開(kāi)啟審計(jì)功能后,可在三個(gè)級(jí)別對(duì)數(shù)據(jù)庫(kù)進(jìn)行審計(jì):Statement(語(yǔ)句)、Privilege(權(quán)限)、object(對(duì)象)。
Statement:
按語(yǔ)句來(lái)審計(jì),比如audit table 會(huì)審計(jì)數(shù)據(jù)庫(kù)中所有的create table,drop table,truncate table語(yǔ)句,alter session by cmy會(huì)審計(jì)cmy用戶(hù)所有的數(shù)據(jù)庫(kù)連接。
Privilege:
按權(quán)限來(lái)審計(jì),當(dāng)用戶(hù)使用了該權(quán)限則被審計(jì),如執(zhí)行g(shù)rant select any table to a,當(dāng)執(zhí)行了audit select any table語(yǔ)句后,當(dāng)用戶(hù)a 訪問(wèn)了用戶(hù)b的表時(shí)(如select * from b.t)會(huì)用到select any table權(quán)限,故會(huì)被審計(jì)。注意用戶(hù)是自己表的所有者,所以用戶(hù)訪問(wèn)自己的表不會(huì)被審計(jì)。
Object:
按對(duì)象審計(jì),只審計(jì)on關(guān)鍵字指定對(duì)象的相關(guān)操作,如aduit alter,delete,drop,insert on cmy.t by scott; 這里會(huì)對(duì)cmy用戶(hù)的t表進(jìn)行審計(jì),但同時(shí)使用了by子句,所以只會(huì)對(duì)scott用戶(hù)發(fā)起的操作進(jìn)行審計(jì)。注意Oracle沒(méi)有提供對(duì)schema中所有對(duì)象的審計(jì)功能,只能一個(gè)一個(gè)對(duì)象審計(jì),對(duì)于后面創(chuàng)建的對(duì)象,Oracle則提供on default子句來(lái)實(shí)現(xiàn)自動(dòng)審計(jì),比如執(zhí)行audit drop on default by access;后,對(duì)于隨后創(chuàng)建的對(duì)象的drop操作都會(huì)審計(jì)。但這個(gè)default會(huì)對(duì)之后創(chuàng)建的所有數(shù)據(jù)庫(kù)對(duì)象有效,似乎沒(méi)辦法指定只對(duì)某個(gè)用戶(hù)創(chuàng)建的對(duì)象有效,想比 trigger可以對(duì)schema的DDL進(jìn)行“審計(jì)”,這個(gè)功能稍顯不足。
4、審計(jì)的一些其他選項(xiàng)
by access / by session:
by access 每一個(gè)被審計(jì)的操作都會(huì)生成一條audit trail。
by session 一個(gè)會(huì)話里面同類(lèi)型的操作只會(huì)生成一條audit trail,默認(rèn)為by session。
whenever [not] successful:
whenever successful 操作成功(dba_audit_trail中returncode字段為0) 才審計(jì),
whenever not successful 反之。省略該子句的話,不管操作成功與否都會(huì)審計(jì)。
5、和審計(jì)相關(guān)的視圖
dba_audit_trail:保存所有的audit trail,實(shí)際上它只是一個(gè)基于aud$的視圖。
其它的視圖dba_audit_session,dba_audit_object, dba_audit_statement都只是dba_audit_trail的一個(gè)子集。
dba_stmt_audit_opts:可以用來(lái)查看statement審計(jì)級(jí)別的audit options,即數(shù)據(jù)庫(kù)設(shè)置過(guò)哪些statement級(jí)別的審計(jì)。
dba_obj_audit_opts,dba_priv_audit_opts視圖功能與之類(lèi)似
all_def_audit_opts:用來(lái)查看數(shù)據(jù)庫(kù)用on default子句設(shè)置了哪些默認(rèn)對(duì)象審計(jì)。
6、取消審計(jì)
將對(duì)應(yīng)審計(jì)語(yǔ)句的audit改為noaudit即可,如audit session whenever successful對(duì)應(yīng)的取消審計(jì)語(yǔ)句為noaudit session whenever successful;
7、10g中的審計(jì)告知一切
Oracle 數(shù)據(jù)庫(kù) 10g 審計(jì)以一種非常詳細(xì)的級(jí)別捕獲用戶(hù)行為,它可以消除手動(dòng)的、基于觸發(fā)器的審計(jì)。
假定用戶(hù) Joe 具有更新那張表的權(quán)限,并按如下所示的方式更新了表中的一行數(shù)據(jù):
update SCOTT.EMP set salary = 12000 where empno = 123456;
您如何在數(shù)據(jù)庫(kù)中跟蹤這種行為呢?在 Oracle 9i 數(shù)據(jù)庫(kù)及其較低版本中,審計(jì)只能捕獲“誰(shuí)”執(zhí)行此操作,而不能捕獲執(zhí)行了“什么”內(nèi)容。例如,它讓您知道 Joe 更新了 SCOTT 所有的表EMP,但它不會(huì)顯示他更新了該表中員工號(hào)為 123456 的薪水列。它不會(huì)顯示更改前的薪水列的值 — 要捕獲如此詳細(xì)的更改,您將不得不編寫(xiě)您自己的觸發(fā)器來(lái)捕獲更改前的值,或使用 LogMiner 將它們從存檔日志中檢索出來(lái)。
細(xì)粒度審計(jì)(FGA),是在 Oracle 9i 中引入的,能夠記錄 SCN 號(hào)和行級(jí)的更改以重建舊的數(shù)據(jù),但是它們只能用于 select 語(yǔ)句,而不能用于 DML,如 update 、insert 和delete 語(yǔ)句。因此,對(duì)于 Oracle 數(shù)據(jù)庫(kù) 10g 之前的版本,使用觸發(fā)器雖然對(duì)于以行級(jí)跟蹤用戶(hù)初始的更改是沒(méi)有吸引力的選擇,但它也是唯一可靠的方法。
如果在命令后面添加by user則只對(duì)user的操作進(jìn)行審計(jì),如果省去by用戶(hù),則對(duì)系統(tǒng)中所有的用戶(hù)進(jìn)行審計(jì)(不包含sys用戶(hù)).
例:
AUDIT DELETE ANY TABLE; --審計(jì)刪除表的操作
AUDIT DELETE ANY TABLE WHENEVER NOT SUCCESSFUL; --只審計(jì)刪除失敗的情況
AUDIT DELETE ANY TABLE WHENEVER SUCCESSFUL; --只審計(jì)刪除成功的情況
AUDIT DELETE,UPDATE,INSERT ON user.table by test; --審計(jì)test用戶(hù)對(duì)user.table的delete,update,insert操作
9、精細(xì)審計(jì)
9.1、創(chuàng)建審計(jì)標(biāo)記
SQL> exec dbms_fga.add_policy(object_schema=>'ryan',object_name=>'test',policy_name=>'chk_test',
statement_types=>'select');
9.2、開(kāi)啟審計(jì)
SQL> exec DBMS_FGA.ENABLE_POLICY(object_schema=>'ryan' ,object_name=>'test' ,policy_name=>'chk_test');
9.3、查看審計(jì)記錄
SQL> conn system/811226@ryan123
Connected to Oracle Database 10g Enterprise Edition Release 10.2.0.1.0
Connected as system
SQL> SELECT session_id,TIMESTAMP,db_user,os_user,userhost,sql_text FROM Dba_Fga_Audit_Trail;
SESSION_ID TIMESTAMP DB_USER OS_USER USERHOST SQL_TEXT
---------- ----------- ------------------------------ -------------------------------------------------------------------------------- -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
201 2008-11-4 2 RYAN Ryan WORKGROUP/LENOVO-C30DA497 select * from test
9.4、關(guān)閉審計(jì)
SQL> exec DBMS_FGA.DISABLE_POLICY(object_schema=>'ryan' ,object_name=>'TEST' ,policy_name=>'chk_test');
9.5、刪除審計(jì)標(biāo)記
SQL> exec DBMS_FGA.DROP_POLICY(object_schema=>'ryan' ,object_name=>'TEST' ,policy_name=>'chk_test');
設(shè)置ORACLE審計(jì)
下列步驟可以設(shè)置ORACLE的審計(jì)功能:
1.修改參數(shù)文件(init<sid>.ora,如果使用服務(wù)器參數(shù)文件使用alter system set<parameter>=<value> scope=spfile|both,設(shè)置AUDIT_TRAIL參數(shù),并且重啟數(shù)據(jù)庫(kù)。AUDIT_TRAIL的取值如下:
DB/TRUE:?jiǎn)?dòng)審計(jì)功能,并且把審計(jì)結(jié)果存放在數(shù)據(jù)庫(kù)的SYS.AUD$表中
OS:?jiǎn)?dòng)審計(jì)功能,并把審計(jì)結(jié)果存放在操作系統(tǒng)的審計(jì)信息中
DB_EXTENDED:具有DB/TRUE的功能,另外填寫(xiě)AUD$的SQLBIND和SQLTEXT字段
NONE/FALSE:關(guān)閉審計(jì)功能
2.如果設(shè)置AUDIT_TRAIL = OS,還需要修改參數(shù)AUDIT_FILE_DEST。
如果操作系統(tǒng)支持設(shè)置AUDIT_TRAIL=OS,文件會(huì)自動(dòng)存放在AUDIT_FILE_DEST所指定的目錄下,并且文件名包含進(jìn)程的PID。
比如:
AUDIT_FILE_DEST = $ORACLE_HOME/rdbms/audit
$ ls -l $ORACLE_HOME/rdbms/audit
-rw-rw---- 1 ora92 dba 881 Mar 17 09:57 ora_13264.aud
$ ps -ef|grep 13264
ora92 13264 13235 0 09:56:43 ? 0:00 oracleV92 (DESCRIPTION=(LOCAL=Y)
SQL> select spid, program, username from v$process;
SPID PROGRAM USERNAME
------ -------------------------------------------- -------------
...
13264 oracle@frhp11 (TNS V1-V3) ora92
注意:WINDOWS NT不使用AUDIT_FILE_DEST參數(shù),如果使用OS設(shè)置,那么審計(jì)信息會(huì)存放在WINDOWS NT的事件日志里。
3.確認(rèn)審計(jì)相關(guān)的表是否已經(jīng)安裝
SQLPLUS> connect / AS SYSDBA
SQLPLUS> select * from sys.aud$; --沒(méi)有記錄返回
SQLPLUS> select * from dba_audit_trail;--沒(méi)有記錄返回
如果做上述查詢(xún)的時(shí)候發(fā)現(xiàn)表不存在,說(shuō)明審計(jì)相關(guān)的表還沒(méi)有安裝,需要安裝。
SQLPLUS> connect / as sysdba
SQLPLUS> @$ORACLE_HOME/rdbms/admin/cataudit.sql
審計(jì)表安裝在SYSTEM表空間。所以要確保SYSTEM表空間又足夠的空間存放審計(jì)信息。
4.關(guān)閉并重啟數(shù)據(jù)庫(kù)
5.設(shè)置所需要的審計(jì)信息
下面是一個(gè)例子
SQL> connect system/manager
SQL> grant audit system to scott;
SQL> connect scott/tiger
SQL> audit session;
停止審計(jì):
SQL> noaudit session;
設(shè)置審計(jì)的實(shí)例:對(duì)試圖嘗試口令的訪問(wèn)的審計(jì)
本節(jié)討論的是一個(gè)審計(jì)的實(shí)例,用于記錄嘗試通過(guò)野蠻嘗試法破譯ORACLE帳號(hào)口令的例子:
1.修改審計(jì)相關(guān)參數(shù)2.重啟數(shù)據(jù)庫(kù)
3.設(shè)置審計(jì)信息
SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL
4.查詢(xún)AUD$
SQL> select returncode, action#, userid, userhost, terminal,timestamp
from aud$
RETURNCODE ACTION# USERID USERHOST TERMINAL
---------- ---------- -------- -------------------- --------------------
1017 100 SCOTT WPRATA-BR
1017 100 SCOTT WPRATA-BR
1017 100 SCOTT WPRATA-BR
ORA-1017的含義為錯(cuò)誤的用戶(hù)名口令。通過(guò)查看AUD$表可以清楚地看到WPRATA-BR嘗試破譯SCOTT的口令??梢酝ㄟ^(guò)下面一個(gè)存儲(chǔ)過(guò)程來(lái)分析AUD$表,找出可疑的信息:
create or replace procedure AuditLogin(Since Varchar2,Times PLS_Integer)
is
USER_ID VARCHAR2(20);
cursor c1 is select userid,count(*) from sys.aud$ where returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd')
group by userid;
cursor C2 IS Select userhost, terminal,TO_CHAR(timestamp#,'YYYY-MM-DD:HH24:MI:SS')
from sys.aud$ WHERE returncode='1017' and timestamp#>=to_date(Since,'yyyy-mm-dd') AND USERID=USER_ID;
ct PLS_INTEGER;
V_USERHOST VARCHAR2(40);
V_TERMINAL VARCHAR(40);
V_DATE VARCHAR2(40);
BEGIN
OPEN C1;
dbms_output.enable(1024000);
LOOP
FETCH C1 INTO USER_ID,CT;
EXIT WHEN C1%NOTFOUND;
IF(CT>=TIMES) THEN
DBMS_OUTPUT.PUT_LINE('USER BROKEN ALARM:'||USER_ID);
OPEN C2;
LOOP
FETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE;
DBMS_OUTPUT.PUT_LINE(CHR(9)||'HOST:'||V_USERHOST||',TERM:'||V_TERMINAL||',TIME:'||V_DATE);
EXIT WHEN C2%NOTFOUND;
ENDLOOP;
close c2;
END IF;
ENDLOOP;
close c1;
END;
/
一下是執(zhí)行結(jié)果:
SQL>set serveroutput on;
SQL> execute auditlogin('2004-01-01',2);
USER BROKEN ALARM:SYS
HOST:,TERM:XUJI,TIME:2004-09-22:11:08:00
HOST:,TERM:XUJI,TIME:2004-09-22:11:08:01
HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29
PL/SQL過(guò)程已成功完成。
將審計(jì)相關(guān)的表移動(dòng)到其他表空間
由于AUD$表等審計(jì)相關(guān)的表存放在SYSTEM表空間,因此為了不影響系統(tǒng)的性能,保護(hù)SYSTEM表空間,最好把AUD$移動(dòng)到其他的表空間上??梢允褂孟旅娴恼Z(yǔ)句來(lái)進(jìn)行移動(dòng):
實(shí)際上sys.aud$表上包含了兩個(gè)lob字段,并不是簡(jiǎn)單的move table就可以。
下面是具體的過(guò)程:
alter table sys.aud$ move tablespace users;
alter table sys.aud$ move lob(sqlbind) store as( tablespace USERS);
alter table sys.aud$ move lob(SQLTEXT) store as( tablespace USERS);
alter index sys.I_AUD1 rebuild tablespace users;
alter table audit_actions move tablespace <new tablespace>;
alter index i_audit_actions rebuild online tablespace <new tablespace>;
以上就是ORACLE數(shù)據(jù)庫(kù)標(biāo)準(zhǔn)審計(jì)是怎么樣的,小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。