李偉偉,張濤,馬媛媛,周誠(chéng)
(國(guó)網(wǎng)智能電網(wǎng)研究院,江蘇 南京210003)
隨著智能電網(wǎng)信息化技術(shù)和SG-ERP的互動(dòng)化應(yīng)用開(kāi)展,電力業(yè)務(wù)系統(tǒng)不斷豐富,內(nèi)外網(wǎng)交互行為日益多樣化。很多業(yè)務(wù)系統(tǒng),如電力交易系統(tǒng)、生產(chǎn)系統(tǒng)、財(cái)務(wù)管控、ERP系統(tǒng)、營(yíng)銷(xiāo)系統(tǒng)等,都存在著跨內(nèi)外網(wǎng)邊界的數(shù)據(jù)交換行為。為了能夠及時(shí)監(jiān)控和有效地監(jiān)督信息外網(wǎng)用戶對(duì)信息內(nèi)網(wǎng)各種數(shù)據(jù)庫(kù)的訪問(wèn)行為,并及時(shí)提醒審計(jì)人員對(duì)各種違規(guī)行為進(jìn)行審計(jì)、追蹤和預(yù)警,內(nèi)外網(wǎng)邊界數(shù)據(jù)庫(kù)交互行為的安全審計(jì)[1]必不可少。內(nèi)外網(wǎng)邊界數(shù)據(jù)庫(kù)交互行為審計(jì)過(guò)程中涉及的信息采集、預(yù)處理、數(shù)據(jù)挖掘和分析等相關(guān)技術(shù)研究,對(duì)智能電網(wǎng)信息安全建設(shè)方面有很好的推動(dòng)作用。
目前,公司信息內(nèi)外網(wǎng)邊界的信息交互中,穿透信息內(nèi)外網(wǎng)邊界的數(shù)據(jù)庫(kù)訪問(wèn)行為是重要的分析和審計(jì)對(duì)象,數(shù)據(jù)庫(kù)保存著電力業(yè)務(wù)系統(tǒng)的重要信息,如用戶用電信息、營(yíng)銷(xiāo)業(yè)務(wù)數(shù)據(jù)等機(jī)密、敏感數(shù)據(jù)。因此,數(shù)據(jù)庫(kù)對(duì)于黑客和不法人員有著很強(qiáng)的吸引力。數(shù)據(jù)庫(kù)建立后會(huì)被頻繁地使用,頻繁地進(jìn)行插入、修改、刪除等操作行為,并且數(shù)據(jù)庫(kù)的使用不受時(shí)間和地點(diǎn)的限制。因此,數(shù)據(jù)庫(kù)的安全性異常重要。由于電力業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)SQL語(yǔ)句操作日志的數(shù)據(jù)量十分龐大,存儲(chǔ)分析存在很大難度。為了更好地對(duì)數(shù)據(jù)庫(kù)行為繼續(xù)審計(jì),對(duì)電力業(yè)務(wù)系統(tǒng)SQL訪問(wèn)語(yǔ)句進(jìn)行壓縮十分必要。
目前對(duì)數(shù)據(jù)庫(kù)審計(jì)系統(tǒng)[2-4]的研究已經(jīng)比較廣泛,針對(duì)日志壓縮相關(guān)的研究比較少,2010年張春玲等人[5]設(shè)計(jì)并實(shí)現(xiàn)了一種基于虛擬日志壓縮的廣域網(wǎng)異構(gòu)數(shù)據(jù)庫(kù)異步數(shù)據(jù)同步方案,虛擬日志壓縮通過(guò)計(jì)算合并日志記錄,只保留與數(shù)據(jù)同步相關(guān)的日志信息,從而減少網(wǎng)絡(luò)數(shù)據(jù)流量,提高數(shù)據(jù)同步效率。2010年王艷峰等人[6]針對(duì)CN頂級(jí)域名的DNS日志從分布式站點(diǎn)傳輸?shù)綌?shù)據(jù)處理中心時(shí)的海量數(shù)據(jù)存儲(chǔ)問(wèn)題,提出一種高效的DNS日志壓縮算法,利用DNS查詢(xún)類(lèi)型的冗余性和DNS查詢(xún)時(shí)間、IP地址和域名等的重復(fù)性進(jìn)行DNS日志壓縮。
同一電力業(yè)務(wù)系統(tǒng)的數(shù)據(jù)庫(kù)操作通過(guò)Web頁(yè)面填表方式進(jìn)行,具有一定的模式可循。SQL日志壓縮方法根據(jù)這一特性通過(guò)模糊化用戶的數(shù)字字母等自定義輸入,為業(yè)務(wù)系統(tǒng)創(chuàng)建SQL模式庫(kù),收到的SQL日志通過(guò)匹配模式庫(kù)后僅記錄其模式序號(hào)即可,大大壓縮了SQL日志的記錄長(zhǎng)度,實(shí)現(xiàn)SQL日志壓縮的目的,為下一步的數(shù)據(jù)庫(kù)操作行為分析提供便利。
SQL日志壓縮方法如圖1所示,日志接收服務(wù)接收到SQL日志,經(jīng)過(guò)掃描程序進(jìn)行SQL語(yǔ)句的解析,形成SQL數(shù)組,并將無(wú)關(guān)項(xiàng)替換后,進(jìn)行SQL模式匹配。如果匹配成功,則返回SQL模式庫(kù)的匹配模式,將序號(hào)寫(xiě)入SQL日志庫(kù);如果SQL模式庫(kù)匹配失敗,則將SQL記錄到模式庫(kù),同時(shí)將序號(hào)寫(xiě)入SQL日志庫(kù)。
數(shù)據(jù)庫(kù)結(jié)構(gòu)定義如下。
圖1 基于模式匹配的SQL日志壓縮方法
·定義應(yīng)用數(shù)據(jù)庫(kù)結(jié)構(gòu)為:{App_ID:應(yīng)用序號(hào),App_IP:應(yīng)用IP地址}。
·定義SQL模式庫(kù)數(shù)據(jù)庫(kù)結(jié)構(gòu)為:{Mode_ID:模式序號(hào),App_ID:應(yīng)用序號(hào),SQL:模式語(yǔ)句}。
·定義SQL日志庫(kù)數(shù)據(jù)庫(kù)結(jié)構(gòu)為:{SQL_ID:SQL語(yǔ)句序號(hào),Mode_ID:模式序號(hào),Time:時(shí)間戳}。
SQL詞法解析是對(duì)存儲(chǔ)一段連續(xù)緩沖區(qū)的SQL語(yǔ)句進(jìn)行分解,得到一個(gè)個(gè)獨(dú)立的單詞,并且組織成單詞鏈表。對(duì)SQL進(jìn)行解析的詳細(xì)過(guò)程如下。
·遍歷SQL語(yǔ)句包含的每一個(gè)字符,以空白符作為每個(gè)單詞的開(kāi)始和結(jié)束,解析出SQL語(yǔ)句包含的各個(gè)單詞,同時(shí)識(shí)別各個(gè)單詞的類(lèi)型。目前,規(guī)定的單詞類(lèi)型如下:關(guān)鍵字、標(biāo)識(shí)符、數(shù)字、數(shù)字通配符、字符串通配符、運(yùn)算操作符、邏輯操作符、分隔符、函數(shù)、操作對(duì)象、其他。
·將這些單詞存儲(chǔ)在單詞結(jié)構(gòu)體中,多個(gè)單詞結(jié)構(gòu)體鏈接成一個(gè)鏈表。同時(shí)根據(jù)解析的結(jié)果,給單詞結(jié)構(gòu)體結(jié)構(gòu)的相關(guān)域(如類(lèi)型)賦值。
SQL解析過(guò)程示例如圖2所示。
由于從應(yīng)用服務(wù)器送出的SQL語(yǔ)句是包含用戶輸入的,而用戶輸入是不斷變化的,如何將正確的SQL語(yǔ)句進(jìn)行抽象,分離出用戶輸入和SQL主干語(yǔ)句是重點(diǎn)。替換規(guī)則也是盡可能將用戶輸入部分提取出來(lái),用某個(gè)特定的通配符進(jìn)行替代,這樣就可以將多條結(jié)構(gòu)相似的SQL語(yǔ)句抽象為一條SQL語(yǔ)句。
替換用戶輸入示例如圖3所示。
SQL模式匹配是根據(jù)詞法解析結(jié)果(詞法鏈),匹配SQL詞法鏈池。詳細(xì)步驟如下。
圖2 SQL解析過(guò)程示例
圖3 SQL解析后替換用戶輸入過(guò)程示例
·SQL詞法鏈池對(duì)外是一個(gè)散列數(shù)組,因此匹配過(guò)程首先對(duì)詞法鏈求散列值,然后在散列數(shù)組中進(jìn)行查找。
散列值計(jì)算方法:Hash=Hash<<8+Type(Hash初始化為0,Type為語(yǔ)句詞法解析后的單詞類(lèi)型)。
·通過(guò)散列值找到數(shù)組對(duì)應(yīng)項(xiàng),然后在該數(shù)組單元下掛詞法鏈表進(jìn)行比較。檢查是否有完全相同的詞法鏈,如果有,則認(rèn)為SQL模式已經(jīng)存在,僅保存SQL模式序號(hào)到SQL日志表中,否則認(rèn)為SQL模式不存在,保存模式后,再將模式序號(hào)保存到SQL日志表中。
SQL模式引擎詳細(xì)匹配過(guò)程如圖4所示。
實(shí)現(xiàn)電力業(yè)務(wù)系統(tǒng)SQL訪問(wèn)日志的壓縮,主要有3個(gè)模塊:初始化模塊、模式庫(kù)匹配模塊、結(jié)果寫(xiě)入模塊。
·初始化模塊:主要是初始化系統(tǒng)的全局互斥變量,通過(guò)讀取模式庫(kù)中SQL語(yǔ)句,初始化每個(gè)業(yè)務(wù)系統(tǒng)對(duì)應(yīng)的詞法掃描鏈表。
·模式庫(kù)匹配:將讀取的SQL日志通過(guò)SQL詞法解析、用戶輸入替換,形成鏈表,與模式庫(kù)中的SQL模式進(jìn)行匹配。
·結(jié)果寫(xiě)入:對(duì)已經(jīng)存在相應(yīng)SQL模式的日志,只需要寫(xiě)入SQL日志表即可,對(duì)于沒(méi)有匹配的日志,則既要寫(xiě)入模式庫(kù),又要寫(xiě)入SQL日志表。
圖4 SQL模式庫(kù)匹配過(guò)程
詳細(xì)的系統(tǒng)實(shí)現(xiàn)流程如圖5所示。
圖5 電力業(yè)務(wù)系統(tǒng)SQL訪問(wèn)日志壓縮方法實(shí)現(xiàn)流程
實(shí)驗(yàn)設(shè)備硬件環(huán)境:Intel 5500+ICH10R芯片組,2路4核CPU。操作系統(tǒng)是Windows7。
編程語(yǔ)言:C語(yǔ)言。
測(cè)試庫(kù)SQL語(yǔ)句取樣:業(yè)務(wù)系統(tǒng)現(xiàn)場(chǎng)采集SQL日志。
·加載SQL日志文本文件;
·執(zhí)行壓縮,記錄SQL模式庫(kù)中SQL語(yǔ)句的條數(shù)和SQL日志庫(kù)記錄的日志條數(shù)。
圖6、表1為SQL壓縮效果測(cè)試結(jié)果。
圖6 SQL壓縮效果測(cè)試結(jié)果
通過(guò)測(cè)試結(jié)果可知,隨著業(yè)務(wù)系統(tǒng)執(zhí)行的SQL數(shù)目的增加,壓縮比例達(dá)到50∶1。測(cè)試過(guò)程中,服務(wù)器的CPU、內(nèi)存和硬盤(pán)各項(xiàng)指標(biāo)檢測(cè)正常。
本文設(shè)計(jì)并實(shí)現(xiàn)了一種電力業(yè)務(wù)系統(tǒng)SQL訪問(wèn)日志壓縮方法,該方法除了實(shí)現(xiàn)SQL訪問(wèn)日志的壓縮之外,也具有SQL日志的簡(jiǎn)單分類(lèi)的功能,可解決數(shù)據(jù)庫(kù)審計(jì)過(guò)程中SQL語(yǔ)句容量過(guò)大、不易存儲(chǔ)和分析的問(wèn)題,為電力業(yè)務(wù)系統(tǒng)安全審計(jì)提供了支撐。系統(tǒng)測(cè)試結(jié)果表明,通過(guò)該方法可以實(shí)現(xiàn)SQL訪問(wèn)日志的大幅度壓縮,滿足電力業(yè)務(wù)系統(tǒng)數(shù)據(jù)庫(kù)行為審計(jì)對(duì)日志預(yù)處理的需求。
表1 SQL壓縮效果測(cè)試結(jié)果
[1]方杰,朱京紅.日志挖掘中的數(shù)據(jù)預(yù)處理[J].計(jì)算機(jī)技術(shù)與發(fā)展,2010,20(4):17-20.FANG J,ZHU J H.Data pretreatment of log mining[J].Computer Technology and Development,2010,20(4):17-20.
[2]HELMAN P,LIEPINS G.Statistical foundations of audit trail analysis for the detection of computer misuse[J].IEEE Transactions on Software Engineering,1993,19(9):886-901.
[3]BISKUP J.Recent advances in intrusion detection[M].Berlin:Springer,2000:28-48.
[4]王淵,馬駿.一種基于入侵檢測(cè)的數(shù)據(jù)庫(kù)安全審計(jì)[J].計(jì)算機(jī)仿真,2007,24(2):33-36.WANG Y,MA J.A method of database secure audit based on intrusion detection[J].Computer Simulation,2007,24(2):33-36.
[5]張春玲,呂震宇,劉遵峰.基于虛擬日志壓縮的數(shù)據(jù)同步方案[J].計(jì)算機(jī)工程,2010,18(36):67-69.ZHANG C L,LV Z Y,LIU Z F.Data synchronization solution based on virtual log compression[J].Computer Engineering,2010,18(36):67-69.
[6]王艷峰,王正,閻保平.一種高效的DNS日志壓縮算法[J].計(jì)算機(jī)工程,2010,15(36):32-35.WANG Y F,WANG Z,YAN B P.High-efficient DNS log compression algorithm[J].Computer Engineering,2010,15(36):32-35.