Oracle審計功能介紹_第1頁
Oracle審計功能介紹_第2頁
Oracle審計功能介紹_第3頁
Oracle審計功能介紹_第4頁
Oracle審計功能介紹_第5頁
已閱讀5頁,還剩7頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Oracle審計功能

一、審計分類:

Oracle中審計總體上可分為“標準審計”和“細粒度審計”后者也稱為“基

于政策的審計”,在OraclelOG之后功能得到很大增強。其中標準審計可分為用

戶級審計和系統(tǒng)級審計。用戶級審計是任何Oracle用戶可設置的審計,主要是

用戶針對自己創(chuàng)建的數(shù)據(jù)庫表或視圖進行審計,記錄所有用戶對這些表或視圖的

一切成功和(或)不成功的訪問要求以及各種類型的SQL操作。系統(tǒng)級審計只能由

DBA設置,用以監(jiān)測成功或失敗的登錄要求、監(jiān)測GRANT和REVOKE操作以

及其他數(shù)據(jù)庫級權(quán)限下的操作。

二、標準審計:

2.1分類:

在ORACLE中分別支持以下三種標準審計類型:

?語句審計,對某種類型的SQL語句審計,不指定結(jié)構(gòu)或?qū)ο螅?/p>

?特權(quán)審計,對執(zhí)行相應動作的系統(tǒng)特權(quán)的使用審計。

?對象審計,對一特殊模式對象上的指定語句的審計。

這三種標準審計類型分別對如下3方面進行審計:

?審計語句的成功執(zhí)行、不成功執(zhí)行,或者其兩者。

?對每一用戶會話審計語句執(zhí)行一次或者對語句每次執(zhí)行審計一次。

?對全部用戶或指定用戶的活動的審計O

當數(shù)據(jù)庫的審計功能打開后,在語句執(zhí)行階段產(chǎn)生審計記錄。審計記錄包含有審計的操

作、用戶執(zhí)行的操作、操作的日期和時間等信息。審計記錄可存在數(shù)據(jù)字典表(稱為審計

記錄)或操作系統(tǒng)審計記錄中。數(shù)據(jù)庫審計記錄是在SYS模式的AUD$表中。

2.2設置ORACLE標準審計:

下列步驟可以設置ORACLE的標準審計功能:

1.修改初始化參數(shù)文件(init<sid>.ora)

如果使用服務器參數(shù)文件使用altersystemset<parameter>=<value>scope=spfile|b

Oth,詳情參照1?1節(jié)中關(guān)于參數(shù)文件的介紹),設置AUDIT_TRAIL參數(shù),并且重啟數(shù)據(jù)庫。

AUDIT_TRAIL的取值如下:

?DB/TRUE:啟動審計功能,并且把審計結(jié)果存放在數(shù)據(jù)庫的SYS.AUD$表中

?OS:啟動審計功能,并把審計結(jié)果存放在操作系統(tǒng)的審計信息中

?DB_EXTENDED:具有DB/TRUE的功能,另外填寫/\1}口$的SQLBIND和SQLTEXT

字段

?NONE/FALSE:關(guān)閉審計功能

2.設置AUDIT_TRAIL參數(shù):

如果設置AUDIT_TRAIL=OS,還需要修改參數(shù)AUDIT_FILE_DEST。

如果操作系統(tǒng)支持設置AUDIT_TRAIL=OS,文件會自動存放在AUDIT_FILE

_DEST所指定的目錄下,并且文件名包含進程的PID。

比如:

AUDIT_FILE_DEST=$ORACLE_HOME/rdbms/audit

$Is-I$ORACLE_HOME/rdbms/audit

-rw-rw--1ora92dba881Mar1709:57ora_13264.aud

$ps-ef|grep13264

ora921326413235009:56:43?0:00oracleV92(DESCRIPTION=(LOCAL=Y)

SQL>selectspid,program,usernamefromv$process;

SPIDPROGRAMUSERNAME

13264oracle@frhp11(TNSV1-V3)ora92

3.確認審計相關(guān)的表是否已經(jīng)安裝

SQLPLUS>connect/ASSYSDBA

SQLPLUS>select*fromsys.aud$;-沒有記錄返回

SQLPLUS>select*fromdba_audit_trail;-沒有記錄返回

如果做上述查詢的時候發(fā)現(xiàn)表不存在,說明審計相關(guān)的表還沒有安裝,需要安裝。

SQLPLUS>connect/assysdba

SQLPLUS>@$ORACLE_HOME/rdbms/admin/cataudit.sql

審計表安裝在SYSTEM表空間。所以要確保SYSTEM表空間又足夠的空間存放審計信息.

4.關(guān)閉并重啟數(shù)據(jù)庫

5.設置所需要的審計信息

下面是一個例子

SQL>connectsystem/manager

SQL>grantauditsystemtoscott;

SQL>connectscott/tiger

SQL>auditsession;

停止審計:

SQL>noauditsession;

通常設置了標準審計后都是通過Audit語句開啟審計,使用noaudit語句收回審計。如下

所示:

對修改SC表結(jié)構(gòu)或數(shù)據(jù)的操作進行審計可使用如下語句:

AUDIEALTER,UPDATEONSC;

取消對sc表的一切審計可使用如下語句:

NOAUDITALLONSC;

2.3設置審計的實例(對試圖嘗試口令的訪問的審計):

以下是一個審計的實例,用于記錄嘗試通過野蠻嘗試法破譯ORACLE帳號口

令的例子:

I.修改審計相關(guān)參數(shù)(參照上面介紹的方法)

2.重啟數(shù)據(jù)庫

3.設置審計信息

SQL>AUDITALLBYACCESSWHENEVERNOTSUCCESSFUL

4.查詢AUD$

SQL>selectreturncode,action#,userid,userhost,terminal,timestamp

fromaud$

RETURNCODEACTION#USERIDUSERHOSTTERMINAL

1017100SCOTTWPRATA-BR

1017100SCOTTWPRATA-BR

1017100SCOTTWPRATA-BR

ORA?1017的含義為錯誤的用廣?名口令。通過查看AUD$表可以清楚地看到WPRATA?BR

嘗試破譯SCOTT的口令。可以通過下面一個存儲過程來分析AUD$表,找出可疑的信息:

createorreplaceprocedureAudltLogln(SinceVarchar2,TimesPLSJnteger)

is

USERJDVARCHAR2(20);

cursorc1isselectuserid,count(*)fromsys.aud$wherereturncode='1017'and

timestamp#>=to_date(Since,'yyyy-mm-dd')

groupbyuserid;

cursorC2ISSelectuserhost,

terminal,TO_CHAR(timestamp#,,YYYY-MM-DD:HH24:MI:SS,)

fromsys.aud$WHEREreturncode='1017'and

timestamp#>=to_date(Since,'yyyy-mm-dd,)ANDUSERID=USER_ID;

CtPLSJNTEGER;

V_USERHOSTVARCHAR2(40);

V_TERMINALVARCHAR(40);

V_DATEVARCHAR2(40);

BEGIN

OPENC1;

dbms_output.enable();

LOOP

FETCHC1INTOUSERJD,CT;

EXITWHENC1%NOTFOUND;

IF(CT>=TIMES)THEN

DBMS_OUTPUT.PUT_LINE('USERBROKENALARM/HUSERJD);

OPENC2;

LOOP

FETCHC2INTOV_USERhOST,V_TERMINAL,V_DATE;

DBMS_OUTPUT.PUT_LINE(CHR(9)irHOST:'||V_USERHOST||',TERM:'||V_TERMINAL

ir,TIME:*||V_DATE);

EXITWHENC2%NOTFOUND;

ENDLOOP;

closec2;

ENDIF;

ENDLOOP;

closec1;

END;

一下是執(zhí)行結(jié)果:

SQL>setserveroutputon;

SQL>executeauditlogin(,2004-01-01',2);

USERBROKENALARM: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/SQLn□□□□□□□

2.4將審計相關(guān)的表移動到其他表空間:

由于AUD$表等審計相關(guān)的表存放在SYSTEM表空間,因此為了不影響系統(tǒng)的性能,保護

SYSTEM表空間,最好把AUD$移動到其他的表空間上。叮以使用卜面的語句來進行移動:

sql>connect/assysdba;

sql>altertableaud$movetablespace<newtablespace>;

sql>alterindexI_aud1rebuildonlinetablespace<newtablespace>;

SQL>altertableauditsmovetablespace<newtablespace>;

SQL>alterindexi_auditrebuildonlinetablespace<newtablespace>;

SQL>altertableaudit_actionsmovetablespace<newtablespace>;

SQL>alterindexi_audit_actionsrebuildonlinetablespace<newtablespace>;

三、細粒度審計:

細粒度審計(FGA)(通過Oracle的.引入)可以理解為“基于政策的審計”。與

標準的審計功能相反,F(xiàn)GA可用于指定生成審計記錄必需的條件:

FCA政策通過使用“dbms_fga”程序包以編程方式綁定到對象(表、視圖)。類

似于用于通過VPD(〃dbms_rls〃)進行訪問控制的程序包,它允許您創(chuàng)建任何需

要的條件,例如:僅當以卡條件為真時審計事件:

在早上九點到下午六點之間或在星期六和星期日對某個表進行了訪問。

?使用了公司網(wǎng)絡外部的某個IP地址。

?選定或更新了特定列。

?使用了該列的特定值。

這將創(chuàng)建更有意義的審計線索,因為無需記錄每一個人對表的每一次訪問。從

Oracle數(shù)據(jù)庫10g開始,FGA支持在一個策略中使用“選擇”、“插入”、“更

新”和“刪除”語句的任意組合。事實上,綁定到表的FGA政策簡化了審計玫策

的管理,因為這將只需在數(shù)據(jù)庫中對其更改一次,不用在每個應用程序中一次次

進行。此外。無論用戶通過何種方式連接至數(shù)據(jù)庫(通過應用程序、Web接口或

通過SQL*Plus),其操作都會記錄下來。

3.1使用細粒度審計:

1、創(chuàng)建測試表:

createtableACCOUNT

(AACT_NOnumbernotnul1,

CUST_IDnumbernotnul1,

BALANCEnumber(15z2)

);

2、添加審計策略:

begin

DBMS_FGA.DROP_POLICY(object_schema=>'TEST',

object_name=>'ACCOUNT',

policy_nam^=>1ACCnUNT_ACCR^S');

end;

這段代碼必須由具有執(zhí)行程序包dbms.fga雙限的用戶來執(zhí)行。建議應該建

立一個專門的用戶來專門負責添加審計策略。該過程有許多參數(shù),具體含義如下:

OBJECT_SCHEMA對其定義了FGA策略的表或視圖的所有者

OBJECT_NAME表或視圖的名稱

POLICY_NAME策略的名稱,由用戶自定義—例如,ACCOUNTS_ACCESS

POLICY_TEXT在添加策略時指定的審計條件—例如,BALANCE>=11000

POL1CY_COLIMN審計列—例如,BALANCE

ENABLED如果啟用則為YES,否則為N0

PF_SCHEMA擁有策略處理器模塊的模式(如果存在)

PF_PACKAGE處理器模塊的程序包名稱(如果存在)

PFFUNCTION處理器模塊的過程名稱(如果存在)

3、在定義了策略以后,當用戶以通常的方式對表進行查詢時,如下所示:

select*frombank,accounts;

審計線索記錄此操作。可以使用以下語句查看線索:

selecttimestamp,

dbuser,

os_user,

object_schema,

object_namc,

sql_text

fromdba_fga_audit_trail;

TIMESTAMPDBUSEROSUSEROBJECTOBJECTNSQL_TEXT

26-MAR-10TESTanandaTESTACCOUNTselect*fromaccount

注意名為DBA_FGA_AUDIT_TRAIL的新視圖,它記錄細粒度的訪問信息。其

中顯示了審計事件的時間標記、查詢者的數(shù)據(jù)庫用戶ID、操作系統(tǒng)用戶ID、查

詢中所使用表的名稱和所有者,最后還有確切的查詢語句。

3.2審計列和審計條件:

默認情況下會對被審計對象的所有列開啟審計,當任何一列被訪問時都會紀

錄一條審計信息,這在現(xiàn)實情況下不太常見,因為這樣會使審計信息表增長過快

造成存儲空間的壓力,因此通常都會設置審計條件,當條件觸發(fā)時再發(fā)起審計。

例如我們可以對Account表的Balance列設置審計條件,當訪問該列并觸發(fā)審計

條件時才進行審計。如下所示:

begin

dbms_fga.add_policy(

object_schema=>,TES^',

object_name=>,ACCOUNT*,

policy_name=>,ACCOUNT_ACCESSJ,

audit_column=>'BALANCE',

audit_condition=>>BALANCE>=11000,

);

end;

該策略將在訪問BALANCE列并且只有訪問列值大于等于11000時才發(fā)起審計。因

此根據(jù)該條件戶有如下不同審計狀態(tài):

SQL語句審計狀態(tài)

進行審計。用戶選擇了在添加策略時所指定的

selectbalancefromaccount;

審計列BALANCEo

進行審計。即使用戶沒有明確指定列

select*fromaccount;

BALANCE,*也隱含地選擇了它。

selectcust_idfromaccount進行審計。即使用戶沒有明確指定列

wherebalance<10000;BALANCE,where子句也隱含地選擇了它。

selectcust_idfromaccount;不進行審計。用戶沒有選擇列BALANCEo

不進行審計。用戶沒有明確或隱含地選擇列

selectcount(*)fromaccount;

BALANCEo

3.3優(yōu)化器模式,

FGA需要基于成本的優(yōu)化(CBO),以便正確地工作。在基于規(guī)則的優(yōu)化時,

只要用戶從表中進行選擇,無論是否選擇了相關(guān)的列,都始終生成審計線索,增

加了誤導項目出現(xiàn)的可能性。為使FGA正確地工作,除了在實例級啟用CB0之

外,在SQL語句中應該沒有規(guī)則暗示(hint),并且必須至少使用評估選頊對

查詢中的所有表進行分析工

3.4管理FGA策略:

要刪除策略,您可以使用以F語句:

begin

dbmsfga.droppolicy(

object_schema=>'TEST*,

object_name=>'ACCOUNT,

policy_name=>'ACCOUNT.ACCESS'

);

end;

對于更改策略而言,沒有隨取隨用的解決方案。要更改策略中的任何參數(shù),必須

刪除策略,再使用更改后的參數(shù)添加策略。但是可以暫時禁用已有策略,如下所

示:

begin

dbms_fga.enable_policy(

object_schema=>'TEST*,

object_name=>'ACCOUNT',

policy_name=>'ACCOUNT.ACCESS',

enable=>FALSE

);

end;

若要重新啟用它,可使用同一函數(shù),只需將參數(shù)enable設置為TRUE。

3.5FGA數(shù)據(jù)字典視圖:

FGA策略的定義位于數(shù)據(jù)字典視圖DBA_AUDTT_POLICTES中。該市途中各列含義

如下:

SESSION_ID審計會話標識符;與V$SESSION視圖中的會話標識符不同

TIMESTAMP審計記錄生成時的時間標記

DBUSER發(fā)出查詢的數(shù)據(jù)庫用戶

OS_USER操作系統(tǒng)用戶

USERHOST用戶連接的機器的主機名

客戶標識符(如果由對打包過程

CLIENT_ID

dbms_session.set_identifier的調(diào)用所設置)

EXT_NAME外部認證的客戶名稱,如LDAP用戶

OB.IECT_SCIIEMA對該表的訪問觸發(fā)了審計的表所有者

OBJECT_NAME對該表的SELECT操作觸發(fā)了審計的表名稱

觸發(fā)審計的策略名稱(如果對表定義了多個策略,則每個策略將

POLICY_NAME插入一條記錄。在此情況下,該列顯示哪些行是由哪個策略插

入的。)

SCN記錄了審計的Oracle系統(tǒng)更改號

SQLTEXT由用戶提交的SQL語句

SQLBIND由SQL語句使用的綁定變量(如果存在)

3.6視圖和FGA:

假定在ACCOUNTS表上定義視圖VW_ACCOUNT如下:

createviewvwaccountasselect*fromaccount;

現(xiàn)在,如果用戶從視圖中而不是從表中進行選擇:

select*fromvw_account;

您將看到以下審計線索:

selectobject_name,sqltextfromdba_fga_audit_trail;

OBJECT_NAMESQL_TEX?

ACCOUNTselect木fromvwaccount

注意,是基表名稱而不是視圖名稱出現(xiàn)在OBJEC'匚NAME列中,因為視圖中的選擇

是從基表中進行選擇。但是,SQL_TEXT列記錄/用戶提交的實際語句。

如果只希望審計市視圖的查詢而不是對我的查詢,可以對視圖本身建立策略

略。通過將視圖名稱而不是表的名稱傳遞給打包的過程dbms_fga.add_policy中

中的參數(shù)objectjame,可以完成這項工作。隨后DBA_FGA_AUDIT_TRAIL中的

OBJECT_NAME列將顯示視圖的名稱,并且不會出現(xiàn)有關(guān)袤訪問的附加記錄。

3.7其它用途:

除了記錄對表的選擇訪問,F(xiàn)GA還可用于某些其它情況:

可以對數(shù)據(jù)倉庫使用FGA,以捕獲特定的表、視圖或物化視圖上發(fā)生的所

有語句,這有助于計劃索引。不需要到VSSQL視圖去獲取這些信息。即

使SQL語句已經(jīng)超出了V$SQL的期限,在FGA審計線索中將會始終提

供它。

后于FGA捕獲綁定變量,它可以幫助了解綁定變量值的模式,這有助于

設計直方圖集合等。

?可以向?qū)徲嬚呋駾BA發(fā)送警告,這有助丁跟蹤惡意應用程序。

由于FGA可以作為SELECT語句的觸發(fā)器,可以在需要這種功能的任何時

候使用它。

3.8FGA在10G中的增強:

3.8.1對所有DML的審計:

在9i中FGA只能對Select語句進行審計,而不能對其他DML語句(Update、

Delete.Insert)進行審計,如果想對其他DML語句進行審計那么只能采取數(shù)據(jù)

庫處發(fā)起的形式來實現(xiàn)。在10G中實現(xiàn)了對所有DML語句的審計,如下所示:

begin

dbms_fga.add_policy(

objectschema二)'TEST',

object_name=>'ACCOUNT',

policyname=>>ACCOl'NT_ACCESS,,

audit_column二)'BALANCE',

auditcondition=>'BALANCE>=3000',

statement_types=>JINSERT,UPDATE,DELETE,SELECT,

);

end;

通過statemcntjypcs=>'INSERT,UPDATE,DELETE,SELECT參數(shù)制定了新的策略,該策略可

以對Select之外的所有DML操作進行審計。因此根據(jù)新的審計條件和審計策略會有如下不同情

況:

第1種情況

之前:BALANCE=1000

用戶發(fā)出:

updateaccountsetbalance=1200whereACC0UNT_N0=....

舊的和新的balance都小于3,000,審計條件不滿足;因此這條語句將不會被

審計。

第2種情況

之前:BALANCE=1000

用戶發(fā)出:

updateaccountsetbalance=3200whereACCOUNTING=....

新的balance大于3,000,審計條件滿足;因此這條語句將會被審計。

第3種情況

之前:BALANCE-3200

用戶發(fā)出:

updateaccountsetbalance=1200whereACC0UNT_N0=....

新的balance小于3,000,但舊的balance大于3,000。因此審計條件滿足,

這條語句將被審計。

第4種情況

用戶插入一行,其中有BALANCE<3000o

insertintoaccountvalues(9999,1200,'X'):

因為balance1,200不滿足審計條件,所以這條語句不被審計。如果balance

列大于或等于3,000,它將被審計。

第5種情況

用戶插入一行,其中balance的值為空。

insertintoaccount(accountno,status)values(9997,'X');

因為balance為空,該列沒有任何默認值,所以審計條件不滿足(比較NULL>=

3000結(jié)果為FALSE),這條語句不會被審計。重要注意事項:假設該列有一個

大于3,000的默認值時,這條語句仍然不會被審計,即使插入行的balance列

值大于3000。注意對于DML語句的審計是由一個自動事務插入的;即使回滾

DML語句的操作,審計記錄也將存在不會跟著回滾。

3.8.2制定相關(guān)的列策略:

在表ACCOUNT上定義的一個策略,如下:

begin

dbms_fga.addpolicy(

object_schema=>'TEST),

object,name=>'ACCOUNT',

policy_name=>'ACCUUNTJSEL',

audit_column二)'ACCOUNT_N0,BALANCE',

audit_condition=>'BALANCE>=3000',

statementtypes=>'SELECT?

);

end;

在某些情況下,列的組合可能很重要,而不是某個特定的列。以上策略是在

ACCOUNT_NO和BALANCE上定義的。那么如果用戶發(fā)出以下語句:

selectbalancefromaccountswhereaccount_no=9995;

這條語句將被審計,因為balance列被選中,且余額為3,200,大于3,000,

滿足審計條件。

如果一個用戶想杳出在銀行的總余額,他發(fā)出:

selectsum(balance)fromaccount;

這條查詢幾乎沒什么害處;它不明確指出帳戶所有者和帳戶余額。因此安全策略

可能不會要求審計這條查詢。不過,這條查詢

selectbalancefromaccountwhereaccount_no=9995

必須被審計;因為它明確地指定了一個帳戶。默認地,所有語句都被審計(無論

使用了什么樣的列組合)。這將創(chuàng)建大量不需要的審計線索項目,并可能帶來一

些空間限制問題。為了限制它們,您可以指定僅當在查詢中使用了希望的列組合

時才開始審計。當定義策略時,您可以使用一個新的參數(shù):

auditcolumnopts=>DBMSFGA.ALLCOLUMNS

這個參數(shù)將使策略僅當列ACCOUNT_NO和BALANCE在查詢中都被訪問時才創(chuàng)建

審計線索項目。例如,以下查詢將聲生一個審計線索項目。

selectaccount_no,balancefromaccount;

但這條查詢不會產(chǎn)生審計線索項目。

selectaccount_nofromaccount;

使用這個參數(shù)將把審計的數(shù)量限制在一個更易管理的大小。如果希望采用默認的

行為一即任意列被選中時都進行審計,那么您可以對同一參數(shù)的使用不同值。

audit_column_opts=>DBMS_FGA.AN^'_COLUMNS

3.8.3與標準審計的結(jié)合:

通過制定如下審計策略實現(xiàn)標準審計與細粒度審計的結(jié)合

begin

dbms_fga.add_policy

objectschema=>'TEST,

object_name=>'ACCOUNT,

policyname=>'ACCOUNT_SEL',

audit_column=>'ACCOUNT_NO,BALANCE,,

audil_condilion->'BALANCE>-3000',

statementtypes=>'SELECT',

audit_co1umn_opts=>DBMS_FGA.ALL_COLUMNS,

audit_trai1=>DB

);"

end;

通過指定audi.t_lrail=>DB參數(shù)實現(xiàn)在細粒度審計時開啟標準審計。在Oracle

Database1

溫馨提示

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

評論

0/150

提交評論