安全審計(jì)打造固若金湯的數(shù)據(jù)堡壘(五)
之前的安全審計(jì)系列文章已經(jīng)出了四篇(一,二,三,四),分別介紹了各種類型的審計(jì)。本文是該系列文章的最后一篇,將為你介紹對(duì)DML的審計(jì),并作出總結(jié)。
審計(jì)敏感數(shù)據(jù)的變更
對(duì)數(shù)據(jù)操縱語言(DML)的審計(jì)是另一種常見需求,特別是在財(cái)務(wù)信息的正確性成為主要問題時(shí)。
相關(guān)的審計(jì)需求包括,全面記錄每一次DML活動(dòng)的新值和舊值。例如,你可能需要為雇員表中存儲(chǔ)年金的那一“列”創(chuàng)建審計(jì)跟蹤線索。在這種情況下,你有兩種不同的要求。第一個(gè)要求是完全記錄對(duì)這些值的任何更新,對(duì)于每次更新,要記錄每個(gè)執(zhí)行更新的用戶,使用的客戶端和應(yīng)用程序,以及更新時(shí)間和真實(shí)的SQL語句。第二個(gè)要求是記錄上述所有信息,以及記錄更新前和后的值。不過情況并非總是一樣的,因?yàn)橥ㄟ^使用下面的命令,筆者可以將50%的年金歸為己有:UPDATE EMP SET BONUS = BONUS * 1.5。
盡管DML的審計(jì)跟蹤并記錄新值和舊值是重要的審計(jì)類型。但在使用此技術(shù)時(shí)仍需小心,要有選擇地實(shí)施這種審計(jì)。有時(shí),人們過分熱衷于這種審計(jì),因?yàn)楹?jiǎn)單方便,就為每一次DML操作都啟用了這種審計(jì)。這在技術(shù)上是可能的,但可能會(huì)產(chǎn)生巨大的數(shù)據(jù)量,應(yīng)該確保你的審計(jì)基礎(chǔ)架構(gòu)可以管理這種負(fù)荷,特別是在你的審計(jì)包括新值和舊值時(shí)。例如,單位每天發(fā)生大量業(yè)務(wù),為了簡(jiǎn)單起見,每筆業(yè)務(wù)都僅更新一次值,每個(gè)數(shù)據(jù)庫有多個(gè)表,每個(gè)表有若干個(gè)值需要更新,每個(gè)表有大量記錄。一年后,你會(huì)發(fā)現(xiàn)你的審計(jì)數(shù)據(jù)庫是超過數(shù)據(jù)庫自身的35倍。
因此,在你準(zhǔn)備DML審計(jì)線索時(shí),應(yīng)當(dāng)謹(jǐn)慎地選擇需要審計(jì)的對(duì)象和命令。例如,你可以決定為一個(gè)數(shù)據(jù)庫的表集來創(chuàng)建審計(jì),為某些登錄名或賬戶創(chuàng)建審計(jì)等。更深入的選擇是,你可以選擇為哪些表及表中的哪些列來維護(hù)新值和舊值。
還可以通過三種主要方法來支持DML審計(jì):使用數(shù)據(jù)庫自身的功能、使用一個(gè)外部的審計(jì)系統(tǒng),或使用觸發(fā)器。
所有數(shù)據(jù)庫都提供了實(shí)施DML活動(dòng)審計(jì)的方法。例如,在Oracle中,你可以使用基于redo日志的“日志礦工(log miner )”工具。因?yàn)閞edo日志會(huì)捕獲所有的DML活動(dòng)(包括新值和舊值),“日志礦工(log miner )”可以析取這種信息,并使其可用。在SQL Server中,你可以使用DOP跟蹤事件:
第二種方法,即外部的數(shù)據(jù)庫審計(jì)系統(tǒng),支持基于過濾標(biāo)準(zhǔn)的DML審計(jì),包括數(shù)據(jù)庫對(duì)象、用戶、應(yīng)用程序等。這種系統(tǒng)有助于捕獲并壓縮信息,并便于報(bào)告工具的使用,即使數(shù)據(jù)量很大也不會(huì)產(chǎn)生太多問題。
第三種選擇是簡(jiǎn)單地使用自己定制的觸發(fā)器。這種選擇從技術(shù)上而言,不如其它的選擇,但是如果你從事的并不是一個(gè)大規(guī)模的審計(jì)項(xiàng)目的一部分,而僅僅需要為幾個(gè)對(duì)象創(chuàng)建一個(gè)DML審計(jì)線索,不妨增加觸發(fā)器,將信息寫到一個(gè)特定的審計(jì)表中,這種最簡(jiǎn)單而快捷的方法也許可以幫你順利進(jìn)入下一個(gè)項(xiàng)目。
審計(jì)關(guān)于私密問題的SELECT語句
SELECT語句過去并不是審計(jì)線索的重點(diǎn),但最近對(duì)私密問題的重視已經(jīng)改變了這種情況。例如,如果你需要確??蛻?、合伙人、雇員的機(jī)密信息不會(huì)從數(shù)據(jù)庫中泄露,就得重視審計(jì)SELECT語句。你尤其需要顯示出SELECT語句來自哪里(IP地址、應(yīng)用程序)、誰選擇了數(shù)據(jù)(用戶名)、選擇了哪些數(shù)據(jù)等。在DML的審計(jì)中,SELECT語句的審計(jì)對(duì)于整個(gè)數(shù)據(jù)庫而言并不現(xiàn)實(shí),你需要重視有重要意義的必要問題。
第一步是根據(jù)SELECT線索審計(jì)區(qū)分出哪些數(shù)據(jù)重要。例如,人的姓氏不太算機(jī)密,但姓氏與身份證號(hào)結(jié)合在一起就絕對(duì)是機(jī)密。在數(shù)據(jù)分類階段,你應(yīng)當(dāng)定義機(jī)密信息存在哪里(對(duì)象名及列名),以及哪些信息組合是機(jī)密信息。
創(chuàng)建SELECT審計(jì)線索通常要比其它審計(jì)類型更為困難。很明顯,在這里,快照并不是一個(gè)可行的選擇,觸發(fā)器也不行,所以你只能使用數(shù)據(jù)庫跟蹤或外部的審計(jì)系統(tǒng)。你還可以選擇使用定制日志來構(gòu)建視圖,但這樣做要求的工作量太大。在使用內(nèi)部的數(shù)據(jù)庫特性時(shí),你的選擇更為有限。例如,即使你可以跟蹤SELECT(例如,下圖所示:在SQL Server中使用DOP事件),這也往往是不現(xiàn)實(shí)的,因?yàn)槟阋占嗟男畔ⅲ⑿枰獞?yīng)用過濾器。
第二種方法,即外部的數(shù)據(jù)庫審計(jì)系統(tǒng),支持基于過濾標(biāo)準(zhǔn)的DML審計(jì),包括數(shù)據(jù)庫對(duì)象、用戶、應(yīng)用程序等。這種系統(tǒng)有助于捕獲并壓縮信息,并便于報(bào)告工具的使用,即使數(shù)據(jù)量很大也不會(huì)產(chǎn)生太多問題。
第三種選擇是簡(jiǎn)單地使用自己定制的觸發(fā)器。這種選擇從技術(shù)上而言,不如其它的選擇,但是如果你從事的并不是一個(gè)大規(guī)模的審計(jì)項(xiàng)目的一部分,而僅僅需要為幾個(gè)對(duì)象創(chuàng)建一個(gè)DML審計(jì)線索,不妨增加觸發(fā)器,將信息寫到一個(gè)特定的審計(jì)表中,這種最簡(jiǎn)單而快捷的方法也許可以幫你順利進(jìn)入下一個(gè)項(xiàng)目。
審計(jì)關(guān)于私密問題的SELECT語句
SELECT語句過去并不是審計(jì)線索的重點(diǎn),但最近對(duì)私密問題的重視已經(jīng)改變了這種情況。例如,如果你需要確??蛻?、合伙人、雇員的機(jī)密信息不會(huì)從數(shù)據(jù)庫中泄露,就得重視審計(jì)SELECT語句。你尤其需要顯示出SELECT語句來自哪里(IP地址、應(yīng)用程序)、誰選擇了數(shù)據(jù)(用戶名)、選擇了哪些數(shù)據(jù)等。在DML的審計(jì)中,SELECT語句的審計(jì)對(duì)于整個(gè)數(shù)據(jù)庫而言并不現(xiàn)實(shí),你需要重視有重要意義的必要問題。
第一步是根據(jù)SELECT線索審計(jì)區(qū)分出哪些數(shù)據(jù)重要。例如,人的姓氏不太算機(jī)密,但姓氏與身份證號(hào)結(jié)合在一起就絕對(duì)是機(jī)密。在數(shù)據(jù)分類階段,你應(yīng)當(dāng)定義機(jī)密信息存在哪里(對(duì)象名及列名),以及哪些信息組合是機(jī)密信息。
創(chuàng)建SELECT審計(jì)線索通常要比其它審計(jì)類型更為困難。很明顯,在這里,快照并不是一個(gè)可行的選擇,觸發(fā)器也不行,所以你只能使用數(shù)據(jù)庫跟蹤或外部的審計(jì)系統(tǒng)。你還可以選擇使用定制日志來構(gòu)建視圖,但這樣做要求的工作量太大。在使用內(nèi)部的數(shù)據(jù)庫特性時(shí),你的選擇更為有限。例如,即使你可以跟蹤SELECT(例如,下圖所示:在SQL Server中使用DOP事件),這也往往是不現(xiàn)實(shí)的,因?yàn)槟阋占嗟男畔?,并需要?yīng)用過濾器。
如果你選擇使用外部的審計(jì)系統(tǒng),務(wù)必確保它能夠自動(dòng)完成全部的審計(jì)功能。
總結(jié)
本系列文章介紹了多種不同的審計(jì)線索。為了確保自己的數(shù)據(jù)庫環(huán)境的安全,也為了遵循規(guī)范或內(nèi)部要求,你需要實(shí)施這些審計(jì)。雖然不同的單位有不同需求,但都能夠映射到一系列數(shù)據(jù)庫審計(jì)功能上。這正是文章的重點(diǎn)所在。
為了選擇適合自己需要的審計(jì)類型,你需要選擇用于實(shí)施審計(jì)線索的方法和系統(tǒng),并做出關(guān)于架構(gòu)的決定。這一點(diǎn)很重要,因?yàn)閷徲?jì)并非權(quán)宜之計(jì),你的部署應(yīng)當(dāng)經(jīng)得起時(shí)間的考驗(yàn)。
【編輯推薦】