李偉偉,張濤,馬媛媛,周誠
(國網智能電網研究院,江蘇 南京210003)
隨著智能電網信息化技術和SG-ERP的互動化應用開展,電力業務系統不斷豐富,內外網交互行為日益多樣化。很多業務系統,如電力交易系統、生產系統、財務管控、ERP系統、營銷系統等,都存在著跨內外網邊界的數據交換行為。為了能夠及時監控和有效地監督信息外網用戶對信息內網各種數據庫的訪問行為,并及時提醒審計人員對各種違規行為進行審計、追蹤和預警,內外網邊界數據庫交互行為的安全審計[1]必不可少。內外網邊界數據庫交互行為審計過程中涉及的信息采集、預處理、數據挖掘和分析等相關技術研究,對智能電網信息安全建設方面有很好的推動作用。
目前,公司信息內外網邊界的信息交互中,穿透信息內外網邊界的數據庫訪問行為是重要的分析和審計對象,數據庫保存著電力業務系統的重要信息,如用戶用電信息、營銷業務數據等機密、敏感數據。因此,數據庫對于黑客和不法人員有著很強的吸引力。數據庫建立后會被頻繁地使用,頻繁地進行插入、修改、刪除等操作行為,并且數據庫的使用不受時間和地點的限制。因此,數據庫的安全性異常重要。由于電力業務系統數據庫SQL語句操作日志的數據量十分龐大,存儲分析存在很大難度。為了更好地對數據庫行為繼續審計,對電力業務系統SQL訪問語句進行壓縮十分必要。
目前對數據庫審計系統[2-4]的研究已經比較廣泛,針對日志壓縮相關的研究比較少,2010年張春玲等人[5]設計并實現了一種基于虛擬日志壓縮的廣域網異構數據庫異步數據同步方案,虛擬日志壓縮通過計算合并日志記錄,只保留與數據同步相關的日志信息,從而減少網絡數據流量,提高數據同步效率。2010年王艷峰等人[6]針對CN頂級域名的DNS日志從分布式站點傳輸到數據處理中心時的海量數據存儲問題,提出一種高效的DNS日志壓縮算法,利用DNS查詢類型的冗余性和DNS查詢時間、IP地址和域名等的重復性進行DNS日志壓縮。
同一電力業務系統的數據庫操作通過Web頁面填表方式進行,具有一定的模式可循。SQL日志壓縮方法根據這一特性通過模糊化用戶的數字字母等自定義輸入,為業務系統創建SQL模式庫,收到的SQL日志通過匹配模式庫后僅記錄其模式序號即可,大大壓縮了SQL日志的記錄長度,實現SQL日志壓縮的目的,為下一步的數據庫操作行為分析提供便利。
SQL日志壓縮方法如圖1所示,日志接收服務接收到SQL日志,經過掃描程序進行SQL語句的解析,形成SQL數組,并將無關項替換后,進行SQL模式匹配。如果匹配成功,則返回SQL模式庫的匹配模式,將序號寫入SQL日志庫;如果SQL模式庫匹配失敗,則將SQL記錄到模式庫,同時將序號寫入SQL日志庫。
數據庫結構定義如下。

圖1 基于模式匹配的SQL日志壓縮方法
·定義應用數據庫結構為:{App_ID:應用序號,App_IP:應用IP地址}。
·定義SQL模式庫數據庫結構為:{Mode_ID:模式序號,App_ID:應用序號,SQL:模式語句}。
·定義SQL日志庫數據庫結構為:{SQL_ID:SQL語句序號,Mode_ID:模式序號,Time:時間戳}。
SQL詞法解析是對存儲一段連續緩沖區的SQL語句進行分解,得到一個個獨立的單詞,并且組織成單詞鏈表。對SQL進行解析的詳細過程如下。
·遍歷SQL語句包含的每一個字符,以空白符作為每個單詞的開始和結束,解析出SQL語句包含的各個單詞,同時識別各個單詞的類型。目前,規定的單詞類型如下:關鍵字、標識符、數字、數字通配符、字符串通配符、運算操作符、邏輯操作符、分隔符、函數、操作對象、其他。
·將這些單詞存儲在單詞結構體中,多個單詞結構體鏈接成一個鏈表。同時根據解析的結果,給單詞結構體結構的相關域(如類型)賦值。
SQL解析過程示例如圖2所示。
由于從應用服務器送出的SQL語句是包含用戶輸入的,而用戶輸入是不斷變化的,如何將正確的SQL語句進行抽象,分離出用戶輸入和SQL主干語句是重點。替換規則也是盡可能將用戶輸入部分提取出來,用某個特定的通配符進行替代,這樣就可以將多條結構相似的SQL語句抽象為一條SQL語句。
替換用戶輸入示例如圖3所示。
SQL模式匹配是根據詞法解析結果(詞法鏈),匹配SQL詞法鏈池。詳細步驟如下。

圖2 SQL解析過程示例

圖3 SQL解析后替換用戶輸入過程示例
·SQL詞法鏈池對外是一個散列數組,因此匹配過程首先對詞法鏈求散列值,然后在散列數組中進行查找。
散列值計算方法:Hash=Hash<<8+Type(Hash初始化為0,Type為語句詞法解析后的單詞類型)。
·通過散列值找到數組對應項,然后在該數組單元下掛詞法鏈表進行比較。檢查是否有完全相同的詞法鏈,如果有,則認為SQL模式已經存在,僅保存SQL模式序號到SQL日志表中,否則認為SQL模式不存在,保存模式后,再將模式序號保存到SQL日志表中。
SQL模式引擎詳細匹配過程如圖4所示。
實現電力業務系統SQL訪問日志的壓縮,主要有3個模塊:初始化模塊、模式庫匹配模塊、結果寫入模塊。
·初始化模塊:主要是初始化系統的全局互斥變量,通過讀取模式庫中SQL語句,初始化每個業務系統對應的詞法掃描鏈表。
·模式庫匹配:將讀取的SQL日志通過SQL詞法解析、用戶輸入替換,形成鏈表,與模式庫中的SQL模式進行匹配。
·結果寫入:對已經存在相應SQL模式的日志,只需要寫入SQL日志表即可,對于沒有匹配的日志,則既要寫入模式庫,又要寫入SQL日志表。

圖4 SQL模式庫匹配過程
詳細的系統實現流程如圖5所示。

圖5 電力業務系統SQL訪問日志壓縮方法實現流程
實驗設備硬件環境:Intel 5500+ICH10R芯片組,2路4核CPU。操作系統是Windows7。
編程語言:C語言。
測試庫SQL語句取樣:業務系統現場采集SQL日志。
·加載SQL日志文本文件;
·執行壓縮,記錄SQL模式庫中SQL語句的條數和SQL日志庫記錄的日志條數。
圖6、表1為SQL壓縮效果測試結果。

圖6 SQL壓縮效果測試結果
通過測試結果可知,隨著業務系統執行的SQL數目的增加,壓縮比例達到50∶1。測試過程中,服務器的CPU、內存和硬盤各項指標檢測正常。
本文設計并實現了一種電力業務系統SQL訪問日志壓縮方法,該方法除了實現SQL訪問日志的壓縮之外,也具有SQL日志的簡單分類的功能,可解決數據庫審計過程中SQL語句容量過大、不易存儲和分析的問題,為電力業務系統安全審計提供了支撐。系統測試結果表明,通過該方法可以實現SQL訪問日志的大幅度壓縮,滿足電力業務系統數據庫行為審計對日志預處理的需求。

表1 SQL壓縮效果測試結果
[1]方杰,朱京紅.日志挖掘中的數據預處理[J].計算機技術與發展,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]王淵,馬駿.一種基于入侵檢測的數據庫安全審計[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]張春玲,呂震宇,劉遵峰.基于虛擬日志壓縮的數據同步方案[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].計算機工程,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.