Oracle基于系統(tǒng)級觸發(fā)器的審計功能_第1頁
Oracle基于系統(tǒng)級觸發(fā)器的審計功能_第2頁
Oracle基于系統(tǒng)級觸發(fā)器的審計功能_第3頁
Oracle基于系統(tǒng)級觸發(fā)器的審計功能_第4頁
Oracle基于系統(tǒng)級觸發(fā)器的審計功能_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、基于系統(tǒng)級觸發(fā)器的審計功能從Oracle8i開始,Oracle引入了特殊的觸發(fā)器,這些觸發(fā)器并不是和特殊的DML事件相關(guān)聯(lián)的(DML事件,如,INSERT,UPDATE和DELETE)。這些系統(tǒng)級別的觸發(fā)器包括:l         數(shù)據(jù)庫啟動/關(guān)閉觸發(fā)器l         DDL觸發(fā)器l         最終用戶登陸/注銷觸發(fā)器l  &#

2、160;      系統(tǒng)錯誤觸發(fā)器l         DDL觸發(fā)器使用這些觸發(fā)器,可以對數(shù)據(jù)庫發(fā)生的一些重要事件進(jìn)行審計。當(dāng)觸發(fā)事件發(fā)生的時候,可以啟動觸發(fā)器。在觸發(fā)器中,可以通過DML操作將審計操作記錄在日志表中,或者通過拋出一個EXCEPTION來制止某種操作。在觸發(fā)器中,可以通過使用系統(tǒng)事件函數(shù)(Event Attribute Functions)來獲取一些信息。以下是系統(tǒng)事件函數(shù)的詳細(xì)情況:系統(tǒng)事件函數(shù)函數(shù)名稱類型描述備注ora_client_ip_addr

3、ess VARCHAR2 客戶端的IP地址 ora_database_name VARCHAR2(50) 數(shù)據(jù)庫名稱 ora_dict_obj_name VARCHAR2(30) DDL發(fā)生的對象名稱 ora_dict_obj_owner VARCHAR2(30) DDL發(fā)生對象的宿主 ora_dict_obj_type VARCHAR2(20) 對象類別 ora_is_alter_column(column_name INVARCHAR2) BOOLEAN 當(dāng)某列被修改的時候返回真,否則返回假 ora_is_drop_column(

4、column_name INVARCHAR2) BOOLEAN 當(dāng)某列被刪除的時候返回真,否則返回假 ora_login_user VARCHAR2(30) 登錄的用戶名 ora_sysevent VARCHAR2(20) 系統(tǒng)事件的名稱 is_servererror(error_num in integer)BOLEAN返回系統(tǒng)是否產(chǎn)生某個錯誤 ORACLE 8I開始,提供了一個新的函數(shù)“SYS_CONTEXT”。通過使用SYS_CONTEXT函數(shù)可以獲得一些和用戶相關(guān)的信息,比如:SELECT sys_context('USERENV'

5、;,'TERMINAL') FROM DUAL;用戶環(huán)境的取值包括:l         TERMINAL:客戶端操作系統(tǒng)終端的名稱     l         LANGUAGE:NLS_LANG的值  l         LANG  :ISO字符集的名稱.  l 

6、        SESSIONID:SESSION的IDl         INSTANCE:實例的IDl         ISDBA:是否具有DBA權(quán)限l         CLIENT_INFO:64字節(jié)的用戶信息,可以用DBMS_APPLICATION_INFO設(shè)置的值:l 

7、        NLS_TERRITORY :當(dāng)前SESSION的 territoryl         NLS_CURRENCY:當(dāng)前SESSION的貨幣符l         NLS_CALENDAR:當(dāng)前SESSION的歷法l         NLS_DATE_FORMAT:當(dāng)前SES

8、SION的日期格式l         NLS_DATE_LANGUAGE :顯示日期的語言l         NLS_SORT:排序方式(BINARY 或者linguistic)l         CURRENT_USER:當(dāng)前SESSION擁有權(quán)限的用戶的名稱(比如說當(dāng)前SESSION是SYS,但是正在執(zhí)行system.myproc,那么current_u

9、ser就是system)l         CURRENT_USERID :當(dāng)前SESSION擁有的權(quán)限的用戶的IDl         SESSION_USER:session所屬的用戶名l         SESSION_USERID:當(dāng)前SESSION所屬的用戶idl       &#

10、160; CURRENT_SCHEMA:當(dāng)前SESSION缺省的SCHEMA名稱,可以用SESSION SET CURRENT_SCHEMA 語句修改.  l         CURRENT_SCHEMAID :當(dāng)前SESSION缺省的SCHEMA的IDl         PROXY_USER:打開當(dāng)前SESSION的用戶的名稱l        

11、PROXY_USERID:打開當(dāng)前SESSION的用戶的IDl         DB_DOMAIN:當(dāng)前數(shù)據(jù)庫的DOMAINl         DB_NAME:當(dāng)前數(shù)據(jù)庫的名稱l         HOST:客戶端的主機(jī)名稱l         OS_USER:客戶端的操作系統(tǒng)用戶名

12、l         EXTERNAL_NAME:用戶的外部名稱。對于SSL用戶,使用v.503協(xié)議,返回的值是證書中的DNl         IP_ADDRESS:客戶端的IP地址l         NETWORK_PROTOCOL:連接串中的PROTOCOL=protocol指明的網(wǎng)絡(luò)協(xié)議l     

13、60;   BG_JOB_ID :如果當(dāng)前的SESSION是由ORACLE后臺進(jìn)程啟動的,那么返回JOB_ID,否則返回空值l         FG_JOB_ID:如果當(dāng)前SESSION是由ORACLE客戶端進(jìn)程啟動的一個JOB,那么返回JOB_ID,否則返回空值  l         AUTHENTICATION_TYPE:返回數(shù)據(jù)庫鑒權(quán)的方法,返回值包括:l    

14、;     DATABASE: 使用數(shù)據(jù)庫的用戶名口令l         OS:使用操作系統(tǒng)外部用戶鑒權(quán)l(xiāng)         NETWORK:網(wǎng)絡(luò)鑒權(quán)l(xiāng)         PROXY:OCI的代理連接鑒權(quán)  l         AUT

15、HENTICATION_DATA:使用X.503證書鑒權(quán)的時候,返回HEX2的證書   oracle 8i新增的數(shù)據(jù)庫事件觸發(fā)器從ORALCE 8i開始,用戶可以通過常見系統(tǒng)級觸發(fā)器來追蹤一些系統(tǒng)事件。通過這些觸發(fā)器,用戶可以進(jìn)行一些操作,包括審計、把一些對象PIN入共享池、進(jìn)行一些維護(hù)操作等。以下是一些系統(tǒng)級觸發(fā)器的類型: 觸發(fā)器觸發(fā)時間觸發(fā)條件LogonAfter用戶登錄成功后LogoffBefore用戶退出登錄前StartupAfter數(shù)據(jù)庫啟動后ShutdownBefore數(shù)據(jù)庫關(guān)閉前ServererrorAfter系統(tǒng)發(fā)生故障后Logon/Logoff觸

16、發(fā)器可以用來記錄用戶等入和退出的時間。數(shù)據(jù)庫啟動和關(guān)閉觸發(fā)器可以用來進(jìn)行一些數(shù)據(jù)庫啟動后和關(guān)閉前的前處理和后處理。比如在數(shù)據(jù)庫啟動的時候把一些PL/SQL對象固定倒內(nèi)存中。Servererror觸發(fā)器可以用于記錄某些重要的錯誤信息,以便于跟蹤系統(tǒng),發(fā)現(xiàn)故障。在使用系統(tǒng)級觸發(fā)器前,首先要確認(rèn)系統(tǒng)參數(shù)_system_trig_enabled是否設(shè)置為TRUE。   DDL觸發(fā)器概述通過DDL觸發(fā)器可以記錄特定的DDL操作。DDL觸發(fā)器是從ORACLE 8i開始具有的觸發(fā)器類型。在ORACLE 9i中,DDL觸發(fā)器得到了加強(qiáng)。DDL觸發(fā)器的觸發(fā)事件括:l  &

17、#160;      BEFORE / AFTER ALTERl         BEFORE / AFTER CREATEl         BEFORE / AFTER DROPl         BEFORE / AFTER RENAMEl     &#

18、160;   BEFORE / AFTER ANALYZEl         BEFORE / AFTER ASSOCIATE STATISTICSl         BEFORE / AFTER DISASSOCIATE STATISTICSl         BEFORE / AFTER AUDITl   

19、;      BEFORE / AFTER NOAUDITl         BEFORE / AFTER COMMENTl         BEFORE / AFTER DDLl         BEFORE / AFTER GRANTl      

20、;   BEFORE / AFTER REVOKEl         BEFORE / AFTER TRUNCATEl         AFTER SUSPEND要創(chuàng)建DDL觸發(fā)器,需要一定的系統(tǒng)權(quán)限,這些權(quán)限包括:l         create triggerl      &

21、#160;  create any triggerl         administer database triggerl         alter any triggerl         drop any triggerDDL觸發(fā)器可以用于細(xì)化的DDL操作審計。一般的做法是設(shè)計一張日志表,當(dāng)DDL觸發(fā)器激活后,通過系統(tǒng)相關(guān)的系統(tǒng)事件函數(shù)獲

22、取鎖需要的信息,然后把數(shù)據(jù)插入日志表中。這樣,就可以記錄系統(tǒng)中需要審計的DDL操作。DDL觸發(fā)器可以針對Database級或者SCHEMA級要注意的是,DDL觸發(fā)器僅對以下的對象有效:cluster, function, index, package, procedure, role, sequence,  synonym, table, tablespace, trigger, type, view,  user。 使用系統(tǒng)級觸發(fā)器審計用戶登錄情況    本節(jié)的例子介紹了使用系統(tǒng)的LOGON/LOGOFF觸發(fā)器來審計用戶登錄的情況。對于需要掌

23、握用戶在線時間的系統(tǒng)中十分有用。首先要創(chuàng)建一張表,該表保存用戶登錄的信息。然后創(chuàng)建三個觸發(fā)器,分別對LOGON/LOGOFF和相關(guān)的SERVERERROR進(jìn)行審計。創(chuàng)建審計記錄表:CREATE TABLE log_audit (login_date DATE, logoff_date date,username VARCHAR2(20),user_ip  varchar2(20),error_code varchar2(15); 創(chuàng)建記錄登錄錯誤的觸發(fā)器:CREATE OR REPLACE TRIGGER log_errors AFTER SERVERERROR ON DATABAS

24、E BEGIN  IF (IS_SERVERERROR (1017) THEN   insert into system.log_audit (login_date,error_code) values(sysdate,'ORA-1017');  END IF; END;  創(chuàng)建登錄審計觸發(fā)器:CREATE OR REPLACE TRIGGER logon_audit AFTER LOGON ON DATABASE BEGIN  insert into system.log_audit(login_date,username,u

25、ser_ip) values(sysdate,user,ora_client_ip_address); END;  創(chuàng)建退出審計觸發(fā)器:CREATE OR REPLACE TRIGGER logoff_audit BEFORE LOGOFF ON DATABASE BEGIN  insert into system.log_audit (logoff_date,username,user_ip) values(sysdate,user,ora_client_ip_address); END; /    本例子可以對數(shù)據(jù)庫的登錄和退出記錄日志。當(dāng)

26、觸發(fā)器發(fā)生故障的時候(比如log_audit表所在的表空間滿的時候,會導(dǎo)致用戶登錄失敗。此時,需要使用具有ADMINISTER DATABASE TRIGGER權(quán)限的帳號登錄,然后將審計所使用的觸發(fā)器disabale,或者修正觸發(fā)器的錯誤。因此在使用系統(tǒng)事件觸發(fā)器的時候要十分謹(jǐn)慎。  使用系統(tǒng)級觸發(fā)器禁用DDL語句對于一個上線運(yùn)行的系統(tǒng),使用DDL操作是十分謹(jǐn)慎的。為了防止不必要的誤操作,可以通過DDL觸發(fā)器對某些表禁用DDL操作??梢栽谛枰沟牟僮黝愋蜕鲜褂胷aise_application_error函數(shù)來禁止操作,比如:CREATE OR REPLACE TRIGGER DD

27、L_FB before  ALTER OR DROP  OR RENAME on schema  BEGIN  Raise_application_error(-20030,此系統(tǒng)已經(jīng)運(yùn)行,不允許對表進(jìn)行DDL維護(hù));end;對于設(shè)置了這類觸發(fā)器的用戶,如果需要修改表結(jié)構(gòu),那么需要首先把這個觸發(fā)器關(guān)掉。 使用系統(tǒng)級觸發(fā)器審計重要帳號的DDL語句如果要審計數(shù)據(jù)庫中的DDL操作,那么可以通過DDL觸發(fā)器來實現(xiàn),本節(jié)介紹一個例子,把數(shù)據(jù)庫中的所有DDL操作都記錄下來。本例子可以在oracle 8i或更高的版本中使用。第一步,創(chuàng)建表空間和相關(guān)的日志表:creat

28、e tablespace statlog datafile '/oradata/statlog.dbf' size 200m; create table stat$log_ddl( ddl_date date, user_name varchar2(30), ip_addr VARCHAR2(30),obj_name VARCHAR2(50), ddl_type      VARCHAR2(30), object_type   VARCHAR2(18), owner         VARCHAR2(30), SQL_TEXT      VARCHAR2(1000) TABLESPACE STATLOG;第二步,創(chuàng)建數(shù)據(jù)庫級的DDL觸發(fā)器,把所有的DDL操作都記錄下來 CREATE OR REPLACE TRI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論