<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Decode360's Blog

    業(yè)精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

      BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
      397 隨筆 :: 33 文章 :: 29 評(píng)論 :: 0 Trackbacks
    [Oracle10G新特性]_10.審計(jì)告知一切
    ?
    ??? 我曾經(jīng)做過(guò)一個(gè)使用DBMS_FGA包來(lái)進(jìn)行審計(jì)的功能,其操作過(guò)程也記錄在了《DBMS_FGA包使用介紹》這篇文章里, 當(dāng)然這篇文章更系統(tǒng)的說(shuō)明了這個(gè)功能的細(xì)節(jié),還是非常不錯(cuò)的。對(duì)于Oracle的這個(gè)功能,因?yàn)闆](méi)有使用過(guò)以前的版本,是一開(kāi)始就知道可以這樣使用的,所以似乎少了一些欣喜,但是不得不說(shuō),這個(gè)功能還是相當(dāng)?shù)每岬摹?/font>
    ?
    --------------------------------------------------------------------
    ?
    審計(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)捕獲更改前的值,或使用 Log Miner 將它們從存檔日志中檢索出來(lái)。
    ?
    ??? 這兩種方法都能讓您跟蹤更改的內(nèi)容并記錄更改前的值,但其成本非常高。使用觸發(fā)器編寫(xiě)審計(jì)數(shù)據(jù)可能會(huì)對(duì)性能產(chǎn)生主要的影響;鑒于此,在某些情況下(如在第三方應(yīng)用中)禁止使用用戶(hù)定義的觸發(fā)器。Log Miner 不會(huì)影響性能,但它是依賴(lài)于存檔日志的可用性來(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)有吸引力的選擇,但它也是唯一可靠的方法。
    ?
    ??? 隨著 Oracle 10g 的到來(lái),由于審計(jì)能力的兩個(gè)重大的改變,這些限制也隨之而去。由于兩種審計(jì)類(lèi)型涉及到—標(biāo)準(zhǔn)審計(jì)(在所有版本中均可用)和細(xì)粒度審計(jì)(在 Oracle 9i 及其以上版本中可用)—我們將分別對(duì)它們進(jìn)行處理,然后看看它們是如何相互補(bǔ)充以提供一個(gè)單一的、強(qiáng)大的跟蹤功能。
    ?
    ?
    新特性
    ?
    ??? 首先,F(xiàn)GA 現(xiàn)在除了支持 select 語(yǔ)句外,還支持 DMA 語(yǔ)句。這些更改都記錄在同一個(gè)位置,即表 FGA_LOG$ 中,并通過(guò) DBA_FGA_AUDIT_TRAIL 視圖顯示出來(lái)。除了 DML 外,您現(xiàn)在可以選擇只有在訪(fǎng)問(wèn)了所有或者甚至很少的相關(guān)的列后,才可以觸發(fā)一個(gè)線(xiàn)索。(有關(guān) FGA 在 Oracle 10g 中是如何工作的詳細(xì)信息,請(qǐng)參閱該主題的我的技術(shù)文章的內(nèi)容。)
    ?
    ??? 標(biāo)準(zhǔn)審計(jì),是由 SQL 命令 AUDIT 執(zhí)行的,可用于為特定的對(duì)象快速、容易地設(shè)置跟蹤。例如,如果您想跟蹤對(duì) Scott 所擁有的表 EMP 的所有更新,您可以發(fā)出如下命令:
    ?
    audit UPDATE on SCOTT.EMP by access;
    ?
    ??? 任何用戶(hù)每一次更新表 SCOTT.EMP 時(shí),該命令都會(huì)把所有的更新記錄到審計(jì)跟蹤表 AUD$ 中,可以通過(guò) DBA_AUDIT_TRAIL 視圖來(lái)查看。
    ?
    ??? 這個(gè)功能對(duì)于 Oracle 10g 之前的版本也是可用的。但是,在那些版本中,寫(xiě)到跟蹤中的信息僅限于少數(shù)相關(guān)的項(xiàng),如:發(fā)出該語(yǔ)句的用戶(hù)、時(shí)間、終端標(biāo)識(shí)號(hào)等等;它缺少某些重要的信息,如綁定變量的值。在 Oracle 10g 中,除了以前的版本中所收集到的內(nèi)容之外,審計(jì)操作還捕獲了許多這些重要的信息片斷。用于審計(jì)的原始表 AUD$,包含若干個(gè)用于記錄它們的新列,相應(yīng)地,DBA_AUDIT_TRAIL 視圖也包含這些列。讓我們?cè)敿?xì)地研究一下。
    ?
    ??? EXTENDED_TIMESTAMP
    ?
    ??? 該列以 TIMESTAMP (6) 格式記錄了審計(jì)記錄的時(shí)間戳,它是用格林尼治標(biāo)準(zhǔn)時(shí)間(也稱(chēng)為全球統(tǒng)一時(shí)間)來(lái)記錄時(shí)間的,其小數(shù)點(diǎn)后的秒數(shù)到 9 為止,并且?guī)в袝r(shí)區(qū)信息。以這種格式存儲(chǔ)的時(shí)間的一個(gè)例子如下所示。
    ?
    2004-3-13 18.10.13.123456000 -5:0
    ?
    ??? 日期表示為 2004 年 3 月 13 日,是美國(guó)的東部標(biāo)準(zhǔn)時(shí)間,它比全球統(tǒng)一時(shí)間晚 5 小時(shí)(用 -5.0 來(lái)表示)。
    ?
    ??? 這種以擴(kuò)展格式顯示的時(shí)間有助于把審計(jì)跟蹤精確定位到一個(gè)更窄的時(shí)間間隔中,從而增強(qiáng)了它們的用途,特別是在數(shù)據(jù)庫(kù)橫跨多個(gè)時(shí)區(qū)時(shí)更是如此。
    ?
    ??? GLOBAL_UID 和 PROXY_SESSIONID
    ?
    ??? 當(dāng)使用某種身份管理組件如 Oracle Internet Directory 進(jìn)行身份驗(yàn)證時(shí),用戶(hù)對(duì)數(shù)據(jù)庫(kù)的訪(fǎng)問(wèn)權(quán)限稍有不同。例如,當(dāng)將他們?cè)L問(wèn)數(shù)據(jù)庫(kù)時(shí),可能將他們視為企業(yè)用戶(hù)。審計(jì)這些用戶(hù)不會(huì)在 DBA_AUDIT_TRAIL 視圖的 USERNAME 列中記錄他們的企業(yè)用戶(hù)標(biāo)識(shí)號(hào),以使該信息無(wú)用。在 Oracle 數(shù)據(jù)庫(kù) 10g 中,全局(或企業(yè))用戶(hù)唯一的標(biāo)識(shí)號(hào)記錄在 GLOBAL_UID 列中,并且沒(méi)有作進(jìn)一步的處理或設(shè)置。該列可用于查詢(xún)目錄服務(wù)器,以查找有關(guān)該企業(yè)用戶(hù)的完整的詳細(xì)信息。
    ?
    ??? 有時(shí)企業(yè)用戶(hù)也許是通過(guò)一個(gè)代理用戶(hù)連接到數(shù)據(jù)庫(kù),特別是在多層應(yīng)用中。可以通過(guò)命令為用戶(hù)提供代理身份驗(yàn)證
    ?
    alter user scott grant connect to appuser;
    ?
    ??? 該命令將允許用戶(hù) SCOTT 以 APPUSER 的身份,作為代理用戶(hù)連接到數(shù)據(jù)庫(kù)。在那種情況下,COMMENT_TEXT 列將通過(guò)存儲(chǔ)值 PROXY 來(lái)記錄事實(shí);但是對(duì)于 Oracle 9i 而言,代理用戶(hù)的會(huì)話(huà)標(biāo)識(shí)號(hào)將不會(huì)進(jìn)行記錄。在 Oracle 10g 中,PROXY_SESSIONID 列記錄了它,用于精確標(biāo)識(shí)代理會(huì)話(huà)。
    ?
    ??? INSTANCE_NUMBER
    ?
    ??? 在 Oracle 真正應(yīng)用集群 (RAC) 環(huán)境中,它可能有助于知道在進(jìn)行更改時(shí)用戶(hù)連接的是哪一個(gè)特定的例程。在 Oracle 10g 中,該列記錄了例程號(hào),它是由該例程的初始化參數(shù)文件指定的。
    ?
    ??? OS_PROCESS
    ?
    ??? 在 Oracle 9i 及其較低的版本中,只會(huì)在審計(jì)跟蹤中記錄 SID 值;而不會(huì)記錄操作系統(tǒng)進(jìn)程標(biāo)識(shí)號(hào)。但是,服務(wù)器進(jìn)程的操作系統(tǒng)進(jìn)程標(biāo)識(shí)號(hào)隨后可能是必要的,例如,用于交叉引用一個(gè)線(xiàn)索文件。在 Oracle 10g 中,該值也記錄在該列中。
    ?
    ??? TRANSACTIONID
    ?
    ??? 在此就產(chǎn)生了最關(guān)鍵的信息價(jià)格。假定用戶(hù)發(fā)出下面的命令
    ?
    update CLASS set size = 10 where class_id = 123;
    commit;
    ?
    ??? 該命令獲取一個(gè)事務(wù)項(xiàng),并且生成一個(gè)審計(jì)記錄。但是,您怎樣知道該審計(jì)記錄真正記錄的是什么內(nèi)容呢?如果記錄是一個(gè)事務(wù),該事務(wù)標(biāo)識(shí)號(hào)就會(huì)存儲(chǔ)在該列中。您可以使用它把審計(jì)跟蹤與 FLASHBACK_TRANSACTION_QUERY 視圖聯(lián)接起來(lái)。下面是該視圖中的列的一個(gè)小示例。
    ?
    select start_scn,? start_timestamp,
    commit_scn, commit_timestamp, undo_change#, row_id, undo_sql
    from flashback_transaction_query
    where xid = '<the transaction id>';
    ?
    ??? 除了記錄對(duì)該事務(wù)所做的通常的統(tǒng)計(jì)外,如 undo change#、rowid 等等,Oracle 10g 還可以在 UNDO_SQL 列中記錄撤消對(duì)事務(wù)所作更改 SQL 命令,以及在 ROW_ID 列顯示的受影響行的 rowid。
    ?
    ??? 系統(tǒng)更改號(hào)
    ?
    ??? 最終,它記錄更改前的值。您怎樣執(zhí)行該操作呢?按 Oracle 9i 中的 FGA 所指出的那樣,更改前的值可以通過(guò)閃回查詢(xún)來(lái)獲取。但是您需要知道該更改的系統(tǒng)更改號(hào) (SCN),它可以在審計(jì)跟蹤的該列中捕獲到。您可以發(fā)出下面的命令
    ?
    select size from class as of SCN 123456
    where where class_id = 123;
    ?
    ??? 這將顯示用戶(hù)所看到的內(nèi)容或更改前的值。
    ?
    ?
    擴(kuò)展的 DB 審計(jì)
    ?
    ??? 記住我們最初的興趣:為了捕獲用戶(hù)發(fā)出的 SQL 語(yǔ)句,以及在標(biāo)準(zhǔn)審計(jì)中無(wú)法捕獲的綁定變量。在 Oracle 數(shù)據(jù)庫(kù) 10g 中進(jìn)入增強(qiáng)型審計(jì),其中這些任務(wù)變得如同更改一個(gè)簡(jiǎn)單的初始化參數(shù)一樣微不足道。只需把下列代碼行放入?yún)?shù)文件中。
    ?
    audit_trail = db_extended
    ?
    ??? 如果使用該參數(shù),該參數(shù)將在各列中記錄 SQL 文本和綁定變量值。該值在早期的版本中不可用。
    ?
    ?
    觸發(fā)器何時(shí)是必要的
    ?
    ??? 避免誤檢。 審計(jì)跟蹤是通過(guò)來(lái)自于原始事務(wù)的自治事務(wù)生成的。因此,即使原始事務(wù)回滾,它們也會(huì)提交。
    ?
    ??? 有一個(gè)簡(jiǎn)單例子演示了這一點(diǎn)。假定我們已在表 CLASS 上為 UPDATE 設(shè)置了審計(jì)。用戶(hù)發(fā)出一條語(yǔ)句以將數(shù)據(jù)值從 20 更新為 10,然后將其回滾,如下所示。
    ?
    update class set size = 10 where class_id = 123;
    rollback
    ?
    ??? 現(xiàn)在該列的 SIZE 值將變成 20,而不是 10,好像用戶(hù)從未做過(guò)任何事情。但是,即使回滾,審計(jì)跟蹤也將捕獲該更改。在某些情況下這可能不是人們所想要的,尤其是用戶(hù)執(zhí)行了許多回滾時(shí)。在這種情況下,您也許不得不使用觸發(fā)器僅捕獲已提交的更改。如果表 CLASS 上有一個(gè)觸發(fā)器用于將記錄插入到用戶(hù)定義的審計(jì)線(xiàn)索中,在回滾的基礎(chǔ)上審計(jì)線(xiàn)索也被回滾。
    ?
    ??? 捕獲之前更改的值。 Oracle 提供的審計(jì)跟蹤不會(huì)顯示更改前后的值。例如,上述的更改將創(chuàng)建一個(gè)審計(jì)記錄,它顯示了語(yǔ)句和更改的 SCN 號(hào),但沒(méi)有顯示更改前的值 (20)。可以使用閃回查詢(xún)通過(guò) SCN 號(hào)獲取該值,但是它依賴(lài)于在撤消段中可用的信息。如果該信息無(wú)法在由 undo_retention 時(shí)間段指定的期限內(nèi)捕獲到,就永遠(yuǎn)不能檢索出先前的值來(lái)。使用觸發(fā)器保證了無(wú)需依賴(lài)于 undo_retention 時(shí)間段即可捕獲到該值,并且有時(shí)很有用。在這兩種環(huán)境下,您可以決定繼續(xù)使用觸發(fā)器以細(xì)粒度的級(jí)別來(lái)記錄審計(jì)跟蹤。
    ?
    ?
    統(tǒng)一的審計(jì)跟蹤
    ?
    ??? 由于 FGA 和標(biāo)準(zhǔn)審計(jì)捕獲的是相同類(lèi)型的信息,當(dāng)把它們結(jié)合起來(lái)使用時(shí)可以提供許多重要的信息。Oracle 數(shù)據(jù)庫(kù) 10g 把這些跟蹤合并到一個(gè)稱(chēng)為 DBA_COMMON_AUDIT_TRAIL 的通用跟蹤中,它是 DBA_AUDIT_TRAIL 視圖和 DBA_FGA_AUDIT_TRAIL 視圖的一個(gè) UNION ALL 視圖。但是,在這兩種審計(jì)類(lèi)型之間有一些重大的區(qū)別。
    ?
    ?
    結(jié)論
    ?
    ??? 在 Oracle 10g 中,審計(jì)已經(jīng)從一個(gè)單純的“操作記錄者”成長(zhǎng)為一個(gè)“事實(shí)記錄機(jī)制”,它能以一個(gè)非常詳細(xì)的級(jí)別來(lái)捕獲用戶(hù)的行為,這可以消除您對(duì)手動(dòng)的、基于觸發(fā)器的審計(jì)的需要。它還結(jié)合了標(biāo)準(zhǔn)審計(jì)和 FGA 的跟蹤,這使其更易于跟蹤數(shù)據(jù)庫(kù)訪(fǎng)問(wèn),而不用考慮它是如何生成的。
    ?
    ?
    有關(guān)附加信息,請(qǐng)參閱 Oracle Database Security Guide 10g 第 1 版 (10.1)中的 11 的內(nèi)容。
    ?
    ?
    ?
    ?
    posted on 2009-08-11 21:23 decode360 閱讀(242) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 08.DBA
    主站蜘蛛池模板: 亚洲人成影院在线观看| 成人影片一区免费观看| 亚洲人成网站999久久久综合| 亚洲美女视频一区二区三区| 久久久久久亚洲精品| 久久久久亚洲av无码专区蜜芽 | 色噜噜噜噜亚洲第一| 亚洲国产日韩a在线播放| 亚洲小说图区综合在线| 亚洲乱码一区二区三区国产精品| 亚洲理论片中文字幕电影| 亚洲美女大bbbbbbbbb| 亚洲欧洲日本精品| 亚洲成人一级电影| 亚洲乱码卡三乱码新区| 亚洲一级毛片免费在线观看| 亚洲精品午夜国产va久久| 亚洲中文字幕久久久一区| 亚洲成a∧人片在线观看无码| 在线91精品亚洲网站精品成人| 亚洲AV网一区二区三区| 黄色一级视频免费观看| 国产精品99爱免费视频| 99久久99这里只有免费的精品| 秋霞人成在线观看免费视频| 91在线老王精品免费播放| 国产成人无码免费看视频软件| 午夜视频在线在免费| 国产亚洲福利一区二区免费看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 四虎影在线永久免费观看| 婷婷亚洲天堂影院| 国产AV无码专区亚洲AWWW| 亚洲AV日韩AV永久无码免下载| 成年女人A毛片免费视频| 日韩精品免费视频| 一区二区三区免费精品视频| 亚洲欧美日韩一区二区三区 | 久久亚洲国产中v天仙www| 中文字幕亚洲综合小综合在线| 中文字幕乱码系列免费|