Oracle審計(jì)功能詳解_第1頁
Oracle審計(jì)功能詳解_第2頁
Oracle審計(jì)功能詳解_第3頁
Oracle審計(jì)功能詳解_第4頁
Oracle審計(jì)功能詳解_第5頁
免費(fèi)預(yù)覽已結(jié)束,剩余34頁可下載查看

下載本文檔

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

文檔簡介

1、默認(rèn)為 false ,當(dāng)設(shè)置為 true 時(shí),所有 sys 用戶(包括以 sysdba,sysoper 身份登錄的用Oracle審計(jì)功能詳解審計(jì)分類:Oracle中審計(jì)總體上可分為“標(biāo)準(zhǔn)審計(jì)”和“細(xì)粒度審計(jì)”后者也稱為“基 于政策的審計(jì)”,在OraclelOG之后功能得到很大增強(qiáng)。其中標(biāo)準(zhǔn)審計(jì)可分為用戶級審計(jì)和系統(tǒng)級審計(jì)。用戶級審計(jì)是任何Oracle用戶可設(shè)置的審計(jì),主要是用戶針對自己創(chuàng)建的數(shù)據(jù)庫表或視圖進(jìn)行審計(jì),記錄所有用戶對這些表或視圖的一切成功和(或)不成功的訪問要求以及各種類型的SQL操作。系統(tǒng)級審計(jì)只能由DBA設(shè)置,用以監(jiān)測成功或失敗的登錄要求、監(jiān)測GRANT和REVOKE操作以及其

2、他數(shù)據(jù)庫級權(quán)限下的操作。標(biāo)準(zhǔn)審計(jì):2.1分類:在ORACLE中分別支持以下三種標(biāo)準(zhǔn)審計(jì)類型:不指定結(jié)構(gòu)或?qū)ο?。語句審計(jì),對某種類型的 SQL語句審計(jì), 特權(quán)審計(jì),對執(zhí)行相應(yīng)動作的系統(tǒng)特權(quán)的使用審計(jì)。 對象審計(jì),對一特殊模式對象上的指定語句的審計(jì)。這三種標(biāo)準(zhǔn)審計(jì)類型分別對如下 3方面進(jìn)行審計(jì):審計(jì)語句的成功執(zhí)行、不成功執(zhí)行,或者其兩者。對每一用戶會話審計(jì)語句執(zhí)行一次或者對語句每次執(zhí)行審計(jì)一次。對全部用戶或指定用戶的活動的審計(jì)。當(dāng)數(shù)據(jù)庫的審計(jì)功能打開后,在語句執(zhí)行階段產(chǎn)生審計(jì)記錄。審計(jì)記錄包含有審計(jì) 的操作、用戶執(zhí)行的操作、操作的日期和時(shí)間等信息。審計(jì)記錄可存在數(shù)據(jù)字典表(稱SYS模式的AUD$表

3、中。為審計(jì)記錄)或操作系統(tǒng)審計(jì)記錄中。數(shù)據(jù)庫審計(jì)記錄是在2.2和審計(jì)相關(guān)的兩個主要參數(shù)Audit_sys_ op eratio ns未啟動 aud$ 不可用, 那么像 conn戶)的操作都會被記錄, audit trail 不會寫在 aud$ 表中,這個很好理解,假如數(shù)據(jù)庫還/as sysdba 這樣的連接信息, 只能記錄在其它地方。假如是 windows平臺, audti trail會記錄在 windows 的事件管理中,假如是 linux/unix 平臺則會記錄在audit_file_dest參數(shù)指定的文件中。Audit_trailNone :是默認(rèn)值,不做審計(jì);DB :將 audit t

4、rail 記錄在數(shù)據(jù)庫的審計(jì)相關(guān)表中, 如 aud$ ,審計(jì)的結(jié)果只有連接信息;SQLDB,Extended :與 DB 一樣,但是審計(jì)結(jié)果里面除了連接信息還包含了當(dāng)時(shí)執(zhí)行的TEXT 和 SQL_BIND ;OS :將 audit trail 記錄在操作系統(tǒng)文件中,文件名由 audit_file_dest 參數(shù)指定;XML : 10g 里新增,將 audit trail 以 XML 格式記錄在操作系統(tǒng)文件中;XML,Extended : 與 XML 一樣,但是審計(jì)結(jié)果里面除了連接信息還包含了當(dāng)時(shí)執(zhí)行的QL_TEXT 和 SQL_BIND注:這兩個參數(shù)是 static 參數(shù),需要重新啟動數(shù)據(jù)庫才

5、能生效。2.3 審計(jì)級別當(dāng)開啟審計(jì)功能后,可在三個級別對數(shù)據(jù)庫進(jìn)行審計(jì):Statement( 語句 )、 Privilege限)、 object (對象)。Statement按語句來審計(jì),比如audit table會審計(jì)數(shù)據(jù)庫中所有的create table,dro p table,truncate table 語句,alter sessionby cmy會審計(jì)cmy用戶所有的數(shù)據(jù)庫連接。用法:AUDIT sql_statement_clauseBY SESSION | ACCESS WHENEVER NOT SUCCESSFUL;表1列出了可以審計(jì)的語句類型,并且在每個類別中包含了相關(guān)語句的

6、簡要描述。如果指定all,則審計(jì)該列表中的任何語句。然而,表2中的語句類型在啟用審計(jì)時(shí)不屬于all類別;必須在audit命令中顯式地指定它們。表1包括在ALL類別中的可審計(jì)語句語句選項(xiàng)SQL操作ALTER SYSTEM所有ALTER SYSTEM選項(xiàng),例如,動態(tài)改變實(shí)例參數(shù),切換到下一個日志文件組,以及終止用戶會話CLUSTERCREATE、ALTER、DROP 或 TRUNCATE 集群CONTEXTCREATE CONTEXT 或 DROP CONTEXTDATABASE LINKCREATE或DROP數(shù)據(jù)庫鏈接DIMENSIONCREATE、ALTER 或 DROP 維數(shù)DIRECTOR

7、YCREATE 或 DROP 目錄INDEXCREATE、ALTER 或 DROP 索弓 IMATERIALIZEDCREATE、ALTER 或 DROP 物化視圖VIEWNOT EXISTS由于不存在的引用對象而造成的SQL語句的失敗PROCEDUREP ROFILECREATE 或 DROP FUNCTION 、LIBRARY、PACKAGE、PACKAGEBODY 或 PROCEDURECREATE、ALTER 或 DROP 配置文件P UBLIC DATABASECREATE或DROP公有數(shù)據(jù)庫鏈接LINKP UBLIC SYNONYMCREATE或DROP公有同義詞ROLECREAT

8、E、ALTER、DROP 或 SET 角色ROLLBACKCREATE、ALTER 或 DROP 回滾段SEGMENTSEQUENCECREATE 或 DROP 序列SESSION登錄和退出SYNONYMCREATE或DROP同義詞SYSTEM AUDIT系統(tǒng)權(quán)限的AUDIT或NOAUDITSYSTEM GRANTGRANT或REVOKE系統(tǒng)權(quán)限和角色TABLECREATE、DROP 或 TRUNCATE 表TABLESPACECREATE、ALTER 或 DROP 表空間TRIGGERCREATE、ALTER(啟用 / 禁用)、DROP 觸發(fā)器;具有 ENABLE ALLTRIGGERS 或

9、 DISABLE ALL TRIGGERS 的 ALTER TABLETYPECREATE、ALTER和DROP類型以及類型主體USERCREATE、ALTER 或 DROP 用戶VIEWCREATE 或 DROP 視圖表2顯式指定的語句類型語句選項(xiàng)SQL操作ALTER SEQUENCE任何 ALTER SEQUENCE 命令A(yù)LTER TABLE任何ALTER TABLE命令COMMENT TABLE添加注釋到表、視圖、物化視圖或它們中的任何列DELETE TABLE刪除表或視圖中的行EXECUTE PROCEDURE執(zhí)行程序包中的過程、函數(shù)或任何變量或游標(biāo)GRANT DIRECTORYGR

10、ANT或REVOKE DIRECTORY對象上的權(quán)限GRANTPROCEDUREGRANT或REVOKE過程、函數(shù)或程序包上的權(quán)限GRANT SEQUENCEGRANT 或REVOKE序列上的權(quán)限GRANT TABLEGRANT或REVOKE表、視圖或物化視圖上的權(quán)限GRANT TYPEGRANT或REVOKE TYPE上的權(quán)限INSERT TABLEINSERT INTO 表或視圖LOCK TABLE表或視圖上的 LOCK TABLE命令SELECT SEQUENCE引用序列的CURRVAL或NEXTVAL的任何命令SELECT TABLESELECT FROM表、視圖或物化視圖UP DAT

11、E TABLE在表或視圖上執(zhí)行 UP DATEPrivilege :按權(quán)限來審計(jì),當(dāng)用戶使用了該權(quán)限則被審計(jì),如執(zhí)行g(shù)rant select any table to a ,ent_clause中,而不是在語句中,指定系統(tǒng)權(quán)限Object :按對象審計(jì),只審計(jì) on 要害字指定對象的相關(guān)操作,如 aduit alter,delete,drop,insert on cmy.tby scott; 這里會對 cmy 用戶的 t 表進(jìn)行審計(jì),但同時(shí)使用了 by 子句,所以只會對 scott 用戶發(fā)起的操作進(jìn)行審計(jì)。 注重 Oracle 沒有提供對 schema 中所有對象的審計(jì)功能,只能一個一個對象審

12、計(jì),對于后面創(chuàng)建的對象,Oracle 則提供 on default 子句來實(shí)現(xiàn)自動審計(jì), 比如執(zhí)行 audit drop on default by access; 后, 對于隨后創(chuàng)建的對象的 drop 操作都會審計(jì)。但這個 default 會對之后創(chuàng)建的所有數(shù)據(jù)庫對象有效,似乎沒辦法指定只對某個用戶創(chuàng)建的對象有效,想比trigger 可以對 schema 的 DDL 進(jìn)當(dāng)執(zhí)行了 audit select any table 語句后,當(dāng)用戶 a 訪問了用戶 b 的表時(shí)(如 select * from b.t )會用到 select any table 權(quán)限, 故會被審計(jì)。 注重用戶是自己表的所

13、有者, 所以用戶訪問自己的表不會被審計(jì)。sql_statem用法:審計(jì)系統(tǒng)權(quán)限具有與語句審計(jì)相同的基本語法,但審計(jì)系統(tǒng)權(quán)限是在行“審計(jì)”,這個功能稍顯不足。用法:AUDIT schema_object_clause BY SESSION | ACCESS WHENEVER NOTSUCCESSFUL;schema_object_clause指定對象訪問的類型以及訪問的對象??梢詫徲?jì)特定對象上14種不同的操作類型,下表中列出了這些操作。2.4審計(jì)的一些其他選項(xiàng)3.DBA_AUDIT_TRAILbyaccess每一個被審計(jì)的操作都會生成一條audit trail 。bysession一個會話里面同

14、類型的操作只會生成一條audit trail ,默認(rèn)為 by session 。whenevernot successful :wheneversuccessful 操作成功 (dba_audit_trail 中 returncode 字段為 0) 才審計(jì) ,whenevernot successful 反之。省略該子句的話,不管操作成功與否都會審計(jì)。2.5 和審計(jì)相關(guān)的視圖都只是 dba_audit_tdba_audit_trail :保存所有的 audit trail ,實(shí)際上它只是一個基于 aud$ 的視圖。其它的 視圖 dba_audit_session,dba_audit_objec

15、t,dba_audit_statement rail 的一個子集。視圖dba_stmt_audit_opts :可以用來查看 statement 審計(jì)級別的 audit options ,即數(shù)據(jù) 庫設(shè)置過哪些 statement 級別的審計(jì)。 dba_obj_audit_opts,dba_priv_audit_opts功能與之類似all_def_audit_opts :用來查看數(shù)據(jù)庫用 on default 子句設(shè)置了哪些默認(rèn)對象審計(jì)。1. SYS.AUD$審計(jì)功能的底層視圖 ,如果需要對數(shù)據(jù)進(jìn)行刪除 ,只需要對 aud$ 視圖進(jìn)行刪除既可 ,其他視圖里的數(shù)據(jù)都是由 aud$ 所得 .2. D

16、BA_AUDIT_EXISTS列出 audit not exists 和 audit exists 產(chǎn)生的審計(jì)跟蹤 , 我們默認(rèn)的都是 audit exists.可以在里面查處所有審計(jì)所跟蹤的信息,保存所有的audit trail ,實(shí)際上它只是個基于 aud$ 的視圖。 其它的視圖 dba_audit_session,dba_audit_object,dba_audit_statement 都只是 dba_audit_trail 的一個子集。4.DBA_AUDIT_OBJECT可以查詢所有對象跟蹤信息 .(例如 , 對 grant,revoke 等不記錄 ),信息完全包含于 dba_audi

17、t_trail5.DBA_AUDIT_SESSION所得到的數(shù)據(jù)都是有關(guān) logon 或者 logoff 的信息 .6.DBA_AUDIT_STATEMENT列出 grant ,revoke ,audit ,noaudit ,alter system 語句的審計(jì)跟蹤信息 .7.DBA_PRIV_AUDIT_OPTS通過系統(tǒng)和由用戶審計(jì)的當(dāng)前系統(tǒng)特權(quán)8.DBA_OBJ_AUDIT_OPTS可以查詢到所有用戶所有對象的審計(jì)選項(xiàng)9.DB_STMT_AUDIT_OPTS視圖功能與之類似可以用來查看 statement 審計(jì)級別的 audit options ,即數(shù)據(jù)庫設(shè)置過哪些 statement 級

18、別的審計(jì)。 dba_obj_audit_opts,dba_priv_audit_opts10.ALL_DEF_AUDIT_OPTS用來查看數(shù)據(jù)庫用 on default 子句設(shè)置了哪些默認(rèn)對象審計(jì)11.AUDIT_ACTIONS可以查詢出在 aud$ 等視圖中 actions 列的含義12. SYSTEM_PRIVILEGE_MAP可以查詢出aud$等視圖中priv$used 列的含義(注意前面加'-')13. STMT_AUDIT_OPTION_MAP審計(jì)選項(xiàng)類型代碼14. DBA_AUDIT_POLICIES審計(jì) POLICIES15. DBA_COMMON_AUDIT_T

19、RAIL標(biāo)準(zhǔn)審計(jì)+細(xì)粒度審計(jì)合并視圖16. DBA FGA AUDIT TRAIL細(xì)粒度審計(jì)策略的審計(jì)跟蹤條目2.6取消審計(jì)將對應(yīng)審計(jì)語句的audit改為noaudit 即可,女0 audit session wheneversuccessful 對應(yīng)的取消審計(jì)語句為no auditsessi on whe neversuccessful;2.7設(shè)置ORACLE標(biāo)準(zhǔn)審計(jì):下列步驟可以設(shè)置ORACLE的標(biāo)準(zhǔn)審計(jì)功能:1.修改初始化參數(shù)文件(in it<sid>.ora )如果使用服務(wù)器參數(shù)文件使用alter system set <parameter>=<value

20、>scope=spfilelboth ,詳情參照1.1節(jié)中關(guān)于參數(shù)文件的介紹),設(shè)置 AUDIT_TRAIL參數(shù),并且重啟數(shù)據(jù)庫。AUDIT TRAIL的取值如下:DB/TRUE :啟動審計(jì)功能,并且把審計(jì)結(jié)果存放在數(shù)據(jù)庫的SYS.AUD$ 表中審計(jì)表安裝在 SYSTEM 表空間。 所以要確保 SYSTEM 表空間又足夠的空間存放審計(jì)LTEXT字段OS :啟動審計(jì)功能,并把審計(jì)結(jié)果存放在操作系統(tǒng)的審計(jì)信息中XML :啟動審計(jì)功能,并且把審計(jì)結(jié)果以XML格式存放在操作系統(tǒng)的審計(jì)信息中XML_EXTENDED :具有 XML的功能,另外會記錄 SQLBIND 和SQLTEXT信NONE/FA

21、LSE:關(guān)閉審計(jì)功能2.設(shè)置 AUDIT_TRAIL參數(shù):如果設(shè)置 AUDIT_TRAIL = OS,還需要修改參數(shù) AUDIT_FILE_DEST。如果操作系統(tǒng)支持設(shè)置AUDIT_TRAIL=OS ,文件會自動存放在 AUDIT_FILE_DEST所指定的目錄下,并且文件名包含進(jìn)程的PID。3. 確認(rèn)審計(jì)相關(guān)的表是否已經(jīng)安裝SQL PLUS connect / AS SYSDBA沒有記錄返回沒有記錄返回SQL PLUSselect * from sys.aud$;SQL PLUSselect * from dba_audit_trail;如果做上述查詢的時(shí)候發(fā)現(xiàn)表不存在,說明審計(jì)相關(guān)的表還沒

22、有安裝,需要安裝。SQL PLUSconnect / as sysdbaSQL PLUS$ORACLE_HOME/rdbms/admi n/cataudit.sql信息。4. 關(guān)閉并重啟數(shù)據(jù)庫5. 設(shè)置所需要的審計(jì)信息面是一個例子SQL> connect system/managerSQL> grant audit system to scott;SQL> connect scott/tigerSQL> audit session;停止審計(jì):SQL> noaudit session;通常設(shè)置了標(biāo)準(zhǔn)審計(jì)后都是通過 Audit 語句開啟審計(jì),使用 noaudit 語句

23、收回審計(jì)。如下所示:對修改 SC 表結(jié)構(gòu)或數(shù)據(jù)的操作進(jìn)行審計(jì)可使用如下語句:AUDIE ALTER,UPDATE ON SC;取消對 SC 表的一切審計(jì)可使用如下語句:NOAUDIT ALL ON SC;2.8 設(shè)置審計(jì)的實(shí)例(對試圖嘗試口令的訪問的審計(jì))以下是一個審計(jì)的實(shí)例,用于記錄嘗試通過野蠻嘗試法破譯 ORACLE 帳號口令的例子:1. 修改審計(jì)相關(guān)參數(shù)(參照上面介紹的方法)2. 重啟數(shù)據(jù)庫3. 設(shè)置審計(jì)信息SQL>AUDIT ALL BY ACCESS WHENEVER NOT SUCCESSFUL4. 查詢 AUD$SQL> select returncode, acti

24、on#, userid, userhost, terminal,timestampfrom aud$ORA-1017的含義為錯誤的用戶名口令。通過查看 AUD$ 表可以清楚地看到RETURNCODEACTION# USERIDUSERHOST1017100SCOTTWPRATA-BR1017100SCOTTWPRATA-BR1017100SCOTTWPRATA-BRTERMINALWPRATA-BR 嘗試破譯 SCOTT 的口令。 可以通過下面一個存儲過程來分析 AUD$ 表,找出 可疑的信息:create or replace procedure AuditLogin(Since Varch

25、ar2,Times PLS_Integer)isUSER_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$

26、 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);BEGINOPEN C1;dbms_output.enable(1024000);LOOPFETCH C1 INTO USER_ID,CT;EXIT WHEN C1%NOTFOUND;IF(CT>=TIMES) TH

27、ENDBMS_OUTPUT.PUT_LINE('USER BROKEN ALARM:'|USER_ID);OPEN C2;LOOPFETCH C2 INTO V_USERhOST,V_TERMINAL,V_DATE;DBMS_OUTPUT.PUT_LINE(CHR(9)|'HOST:'|V_USERHOST|',TERM:'|V_TERMINAL|',TIME:'|V_DATE);END LOOP;close c2;END IF;END LOOP;close c1;END;一下是執(zhí)行結(jié)果:SQL>set serveroutp

28、ut on;SQL> execute auditlogin('2004-01-01',2);USER BROKEN ALARM:SYSHOST:,TERM:XUJI,TIME:2004-09-22:11:08:00HOST:,TERM:XUJI,TIME:2004-09-22:11:08:01HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29HOST:,TERM:XUJI,TIME:2004-09-22:11:09:29PL/SQL 過程已成功完成。2.9 將審計(jì)相關(guān)的表移動到其他表空間:由于 AUD$ 表等審計(jì)相關(guān)的表存放在 SYSTEM

29、表空間,因此為了不影響系統(tǒng)的性能,保護(hù) SYSTEM 表空間,最好把 AUD$ 移動到其他的表空間上。可以使用下面的語句來進(jìn)行 移動:SQL> connect / as sysdba;SQL>altertableaud$move tablespace<newtablespace>SQL>alterindexI_aud1rebuildonlinetablespace <new tablespace>SQL>altertableaudit$movetablespace<newtablespace>SQL>alterindexi_au

30、ditrebuildonlinetablespace <new tablespace>SQL>altertableaudit_actionsmove tablespace<new tablespace>SQL>alterindexi_audit_actionsrebuildonlinetablespace <new tablespace>2.10 審計(jì)語句樣例jackson-client多層環(huán)境下的審計(jì): appserve- 應(yīng)用服務(wù)器,AUDIT SELECT TABLE BY appserve ON BEHALF OF jackson;審計(jì)連

31、接或斷開連接:指定用戶AUDIT SESSION;AUDIT SESSION BY jeff, lori;審計(jì)權(quán)限 (使用該權(quán)限才能執(zhí)行的操作 ):AUDIT DELETE ANY TABLE BY ACCESS WHENEVER NOT SUCCESSFUL;AUDIT DELETE ANY TABLE;AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE, EXECUTEPROCEDURE BY ACCESS WHENEVER NOT SUCCESSFUL;對象審計(jì):AUDIT DELETE ON jeff.emp;AUDIT SELECT, INS

32、ERT, DELETE ON jward.dept BY ACCESSWHENEVER SUCCESSFUL;取消審計(jì):NOAUDIT session;NOAUDIT session BY jeff, lori;NOAUDIT DELETE ANY TABLE;NOAUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE,EXECUTEPROCEDURE;NOAUDIT ALL;取消所有 statement 審計(jì)NOAUDIT ALL PRIVILEGES;取消所有權(quán)限審計(jì)NOAUDIT ALL ON DEFAULT;取消所有對象審計(jì)2.11 清除審計(jì)信息D

33、ELETE FROM SYS.AUD$;TRUNCATE TABLE SYS.AUD$;DELETE FROM SYS.AUD$ WHERE obj$name='EMP'細(xì)粒度審計(jì):細(xì)粒度審計(jì)(FGA)(通過Oracle9 i弓I入)可以理解為“基于政策的審計(jì)”與標(biāo)準(zhǔn)的審計(jì)功能相反, FGA 可用于指定生成審計(jì)記錄必需的條件:FGA 政策通過使用“ dbms_fga ”程序包以編程方式綁定到對象(表、視圖)。類似于用于通過 VPD ("dbms_rls") 進(jìn)行訪問控制的程序包,它允許您創(chuàng)建任何需要的條件,例如:僅當(dāng)以下條件為真時(shí)審計(jì)事件:? 在早上九點(diǎn)到下

34、午六點(diǎn)之間或在星期六和星期日對某個表進(jìn)行了訪問。? 使用了公司網(wǎng)絡(luò)外部的某個 IP 地址。? 選定或更新了特定列。? 使用了該列的特定值。這將創(chuàng)建更有意義的審計(jì)線索,因?yàn)闊o需記錄每一個人對表的每一次訪問。從Oracle 數(shù)據(jù)庫 10g 開始, FGA 支持在一個策略中使用選擇”、“插入”、更新”和“刪除”語句的任意組合。事實(shí)上,綁定到表的FGA 政策簡化了審計(jì)政策的管理, 因?yàn)檫@將只需在數(shù)據(jù)庫中對其更改一次,不用在每個應(yīng)用程序中一次次進(jìn)行。 此外。無論用戶通過何種方式連接至數(shù)據(jù)庫通過應(yīng)用程序、 Web接口或通過 SQL*Plus ),其操作都會記錄下來。細(xì)粒度審計(jì)的程序包DBMS_FGA 具有

35、 4 個過程:ADD_POLICY- 添加使用謂詞和審計(jì)列的審計(jì)策略DISABLE_POLICY- 禁用審計(jì)策略,但保留與表或視圖關(guān)聯(lián)的策略DROP_POLICY- 刪除審計(jì)策略ENABLE_POLICY-啟用策略3.1使用細(xì)粒度審計(jì):1、創(chuàng)建測試表:create table ACCOUNT(AACT_NO number not null,CUST_ID number not n ull.BALANCE number(15,2);2、添加審計(jì)策略:beginDBMS_FGA.ADD_ POLICY(object_schema => 'TEST',end;object_ n

36、amep olicy_ name這段代碼必須由具有執(zhí)行程序包=> 'ACCOUNT',=> 'ACCOUNT_ACCESS');dbms_fga權(quán)限的用戶來執(zhí)行。建議應(yīng)該建立一個專門的用戶來專門負(fù)責(zé)添加審計(jì)策略。該過程有許多參數(shù),具體含義如 下:OBJECT SCHE對其定義了 FGA策略的表或視圖的所有者M(jìn)AOBJECT_NAM 表或視圖的名稱P OLICY_NAMP OLICY_TEXTP OLICY_COLUMNENABLEDPF SCHEMAPF_P ACKAGEPF FUNCTIO策略的名稱,由用戶自定義 一 例如,ACCOUNTS_ACC

37、ESS在添加策略時(shí)指定的審計(jì)條件一例如,BALANCE >=11000審計(jì)列一例如,BALANCE如果啟用則為YES,否則為NO擁有策略處理器模塊的模式(如果存在)處理器模塊的程序包名稱(如果存在)處理器模塊的過程名稱(如果存在)3、在定義了策略以后,當(dāng)用戶以通常的方式對表進(jìn)行查詢時(shí),如下所示: select * from ban k.acco unts;審計(jì)線索記錄此操作??梢允褂靡韵抡Z句查看線索: select timesta mp.db_user.os_user, object_schema, object_name, sql_text from dba_fga_audit_tra

38、il;TIMESTAMP DB_USER OS_USER OBJECT_ OBJECT_N SQL_TEXT26-MAR-10 TESTananda TESTACCOUNT select * from account注意名為 DBA_FGA_AUDIT_TRAIL 的新視圖,它記錄細(xì)粒度的訪問信息。其中顯示了審計(jì)事件的時(shí)間標(biāo)記、查詢者的數(shù)據(jù)庫用戶ID 、操作系統(tǒng)用戶 ID、查詢中所使用表的名稱和所有者,最后還有確切的查詢語句。3.2 審計(jì)列和審計(jì)條件:默認(rèn)情況下會對被審計(jì)對象的所有列開啟審計(jì), 當(dāng)任何一列被訪問時(shí)都會紀(jì)條審計(jì)信息, 這在現(xiàn)實(shí)情況下不太常見, 因?yàn)檫@樣會使審計(jì)信息表增長過快 造成

39、存儲空間的壓力,因此通常都會設(shè)置審計(jì)條件,當(dāng)條件觸發(fā)時(shí)再發(fā)起審計(jì)。例如我們可以對 Account 表的 Balance 列設(shè)置審計(jì)條件,當(dāng)訪問該列并觸發(fā)審 計(jì)條件時(shí)才進(jìn)行審計(jì)。如下所示: begin dbms_fga.add_policy ( object_schema=>'TEST', object_name=>'ACCOUNT',p olicy_name=>'ACCOUNT_ACCESS', audit_colum n => 'BALANCE', audit_co nditi on => '

40、;BALANCE >= 11000'); end;該策略將在訪問BALANCE列并且只有訪問列值大于等于11000時(shí)才發(fā)起審計(jì)。因此根據(jù)該條件戶有如下不同審計(jì)狀態(tài):審計(jì)狀態(tài)進(jìn)行審計(jì)。用戶選擇了在添加策略時(shí)所指定SQL語句select bala nee from acco unt;的審計(jì)列BALANCE。進(jìn)行審計(jì)。即使用戶沒有明確指定列select * from acco unt;BALANCE,*也隱含地選擇了它。select cust id from account進(jìn)行審計(jì)。即使用戶沒有明確指定列where bala nee < 10000;BALANCE,where子句

41、也隱含地選擇了它。select cust_id from acco unt;不進(jìn)行審計(jì)。用戶沒有選擇列 BALANCE。不進(jìn)行審計(jì)。用戶沒有明確或隱含地選擇列select coun t(*) from acco unt;BALANCE。更詳細(xì)的設(shè)置策略如下:DBMS_FGA.ADD _P OLICY (object_schema VARCHAR2,-schema 的名字 ,表或視圖的擁有者object_name VARCHAR2, -對象名 ,表或視圖的名字policy_name VARCHAR2,- 審計(jì)策略名字 ,它和數(shù)據(jù)庫中其他對象一樣 ,需 要有一個不重復(fù) ,唯一的名字audit_co

42、ndition VARCHAR2, - 篩選條件比如可以選擇哪些符合條件的操 作被記錄audit_column VARCHAR2, - 表中的某一列 ,可以只記錄對表中某一列的操作 .如果不指定表示審計(jì)所有的列handler_schema VARCHAR2, - 是下面的 handler_module 的擁有者 ,其實(shí) 也只能是創(chuàng)建 policy 的用戶 ,而上面的 object_schema 可以是任意用戶handler_module VARCHAR2,- 可以是一個一個存儲過程或函數(shù) ,但監(jiān)測到任 何一條符合條件的操作時(shí)執(zhí)行它 .enable BOOLEAN, -true 或 false

43、表示 policy 是開啟或關(guān)閉狀態(tài) ,如果是 false 表示不進(jìn)行審計(jì)statement_types VARCHAR2, - 表 示 哪 些 操 作 將 被 審 計(jì) , 可 以 填 上 select,insert,update,delete 中的一個或幾個audit_trail BINARY_INTEGER IN DEFAULT,- 有參數(shù) db,xml 表示審計(jì)到的 信息保存到數(shù)據(jù)庫中或是以 xml 文件形式保存到磁盤上audit_column_opts BINARY_INTEGER IN DEFAULT); -這個選項(xiàng)其實(shí)只有 在 audt_column 中指定了某列時(shí)才起作用 .它有

44、 any_columns,all_columns 兩 個選項(xiàng)假如表中有 eno,ename 兩列 ,并在 audit_column 中指定了這兩列 ,那么 選 any_columns 表示 只要操作其中 的任意 一列都將被記 錄 ,而這里 指定all_columns 的話是說只有一個 sql 語句同時(shí)操作了這兩列才被記錄3.3 優(yōu)化器模式:FGA需要基于成本的優(yōu)化(CBO),以便正確地工作。在基于規(guī)則的優(yōu)化時(shí), 只要用戶從表中進(jìn)行選擇, 無論是否選擇了相關(guān)的列, 都始終生成審計(jì)線索, 增 加了誤導(dǎo)項(xiàng)目出現(xiàn)的可能性。為使 FGA 正確地工作,除了在實(shí)例級啟用 CBO 之外,在 SQL 語句中應(yīng)該

45、沒有規(guī)則暗示( hint ),并且必須至少使用評估選項(xiàng) 對查詢中的所有表進(jìn)行分析。3.4 管理 FGA 策略 : 要刪除策略,您可以使用以下語句: begin dbms_fga.drop_policy ( object_schema => 'TEST', object_name => 'ACCOUNT', policy_name => 'ACCOUNT_ACCESS');end;對于更改策略而言, 沒有隨取隨用的解決方案。 要更改策略中的任何參數(shù), 必須 刪除策略, 再使用更改后的參數(shù)添加策略。 但是可以暫時(shí)禁用已有策略, 如下

46、所 示:beg in dbms_fga.e nable_ policy ( object_schema => 'TEST', object_name => 'ACCOUNT', p olicy_name => 'ACCOUNT_ACCESS', en able => FALSE);end;若要重新啟用它,可使用同一函數(shù),只需將參數(shù)enable設(shè)置為TRUE。3.5 FGA數(shù)據(jù)字典視圖:FGA策略的定義位于數(shù)據(jù)字典視圖DBA AUDIT POLICIES中。該市途中各列 含義如下:SESSION_IDTIMESTA MP審計(jì)

47、記錄生成時(shí)的時(shí)間標(biāo)記DB_USER發(fā)出查詢的數(shù)據(jù)庫用戶OS USER操作系統(tǒng)用戶USERHOST用戶連接的機(jī)器的主機(jī)名CLIENT_ID客戶標(biāo)識符(如果由對打包過程 dbms_session.set_identifier審計(jì)會話標(biāo)識符;與 V$SESSION視圖中的會話標(biāo)識符不同的調(diào)用所設(shè)置)外部認(rèn)證的客戶名稱,女口 LDAP用戶OBJECT_SCHEMAOBJECT_NAMEEXT NAME對該表的訪冋觸發(fā)了審計(jì)的表所有者對該表的SELECT操作觸發(fā)了審計(jì)的表名稱觸發(fā)審計(jì)的策略名稱(如果對表定義了多個策略,則每個策略P OLICY_NAM將插入一條記錄。在此情況下,該列顯示哪些行是由哪個策略

48、插入的。)SCN記錄了審計(jì)的Oracle系統(tǒng)更改號SQL TEXT由用戶提交的SQL語句SQL_BIND由SQL語句使用的綁定變量(如果存在)3.6視圖和FGA :假定在 ACCOUNTS 表上定義視圖 VW_ACCOUNT 如下: create view vw_acco unt as select * from acco unt;現(xiàn)在,如果用戶從視圖中而不是從表中進(jìn)行選擇: select * from vw_acco unt;您將看到以下審計(jì)線索: select object_name, sql_text from dba_fga_audit_trail;OBJECT_NAME SQL_TE

49、XTACCOUNT select * from vw_account 注意,是基表名稱而不是視圖名稱出現(xiàn)在 OBJECT_NAME 列中,因?yàn)橐晥D中 的選擇是從基表中進(jìn)行選擇。但是, SQL_TEXT 列記錄了用戶提交的實(shí)際語句。如果只希望審計(jì)對視圖的查詢而不是對表的查詢,可以對視圖本身建立策 略。通過將視圖名稱而不是表的名稱傳遞給打包的過程 dbms_fga.add_policy 中的參數(shù) object_name ,可以完成這項(xiàng)工作。隨后 DBA_FGA_AUDIT_TRAIL 中的 OBJECT_NAME 列將顯示視圖的名稱,并且不會出現(xiàn)有關(guān)表訪問的附加 記錄。3.7 其它用途: 除了記錄

50、對表的選擇訪問, FGA 還可用于某些其它情況:? 可以對數(shù)據(jù)倉庫使用 FGA ,以捕獲特定的表、視圖或物化視圖上發(fā)生的所有語句,這有助于計(jì)劃索引。不需要到 V$SQL 視圖去獲取這些信息。即使 SQL 語句已經(jīng)超出了 V$SQL 的期限,在 FGA 審計(jì)線索中將會始 終提供它。由于 FGA 捕獲綁定變量, 它可以幫助了解綁定變量值的模式, 這有助于 設(shè)計(jì)直方圖集合等。? 可以向?qū)徲?jì)者或 DBA 發(fā)送警告,這有助于跟蹤惡意應(yīng)用程序。由于 FGA 可以作為 SELECT 語句的觸發(fā)器,可以在需要這種功能的任何 時(shí)候使用它。3.8 FGA 在 10G 中的增強(qiáng):3.8.1 對所有 DML 的審計(jì):

51、在9i中FGA只能對Select語句進(jìn)行審計(jì),而不能對其他DML語句(Update、Delete 、Insert )進(jìn)行審計(jì),如果想對其他 DML 語句進(jìn)行審計(jì)那么只能采取數(shù) 據(jù)庫處發(fā)起的形式來實(shí)現(xiàn)。在 10G 中實(shí)現(xiàn)了對所有 DML 語句的審計(jì),如下所 示: begindbms_fga.add_policy (object_schema=> 'TEST',object_name=> 'ACCOUNT',policy_name=> 'ACCOUNT_ACCESS',audit_column=> 'BALANCE&#

52、39;,audit_condition => 'BALANCE >= 3000' statement_types => 'INSERT, UPDATE, DELETE, SELECT');end;通過 statement_types => 'INSERT, UPDATE, DELETE, SELECT'參數(shù)制定了新的策略,該 策略可以對 Select 之外的所有 DML 操作進(jìn)行審計(jì)。因此根據(jù)新的審計(jì)條件和審計(jì)策略會 有如下不同情況:第 1 種情況 之前: BALANCE = 1000 用戶發(fā)出:update accoun

53、t set balance = 1200 where ACCOUNT_NO = 舊的和新的 balance 都小于 3,000 ,審計(jì)條件不滿足;因此這條語句將不會被 審計(jì)。第 2 種情況 之前: BALANCE = 1000 用戶發(fā)出:update account set balance = 3200 where ACCOUNT_NO = 新的 balance 大于 3,000 ,審計(jì)條件滿足;因此這條語句將 會被審計(jì)。第 3 種情況 之前: BALANCE = 3200 用戶發(fā)出:update account set balance = 1200 where ACCOUNT_NO = .新

54、的 balance 小于 3,000 ,但舊的 balance 大于 3,000 。因此審計(jì)條件滿足, 這條語句將被審計(jì)。第 4 種情況 用戶插入一行,其中有 BALANCE < 3000 。insert into account values (9999,1200,'X');因?yàn)?balance 1,200 不滿足審計(jì)條件,所以這條語句不被審計(jì)。如果 balance 列大于或等于 3,000 ,它將被審計(jì)。第 5 種情況 用戶插入一行,其中 balance 的值為空。insert into account (account_no, status) values (999

55、7, 'X');因?yàn)?balance 為空,該列沒有任何默認(rèn)值,所以審計(jì)條件不滿足(比較NULL >= 3000 結(jié)果為FALSE),這條語句不會被審計(jì)。重要注意事項(xiàng):假設(shè) 該列有一個大于 3,000 的默認(rèn)值時(shí),這條語句仍然不會被審計(jì),即使插入行的 balance 列值大于 3000 。 注意對于 DML 語句的審計(jì)是由一個自動事務(wù)插入 的;即使回滾 DML 語句的操作,審計(jì)記錄也將存在不會跟著回滾。3.8.2 制定相關(guān)的列策略:在表 ACCOUNT 上定義的一個策略,如下: begindbms_fga.add_policy (object_schema=> 'TEST',object_name=> 'ACCOUNT',policy_name=> 'AC

溫馨提示

  • 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論