數據庫加密作為近年來興起的數據庫安防技術,已經被越來越多的人所重視。這種基于存儲層加密的防護方式,不僅可以有效解決數據庫明文存儲引起的泄密風險,也可以防止來自內部或者外部的入侵及越權訪問行為。
從技術手段上來看,現今數據庫加密技術主要有三大類,分別是前置代理及加密網關方式、應用層加密方式以及后置代理方式。這三類技術各自的特點如何,彼此之間孰優孰劣,下文詳盡介紹。
該技術思路是在數據庫之前增加一道安全代理服務,對數據庫訪問的用戶必須經過該安全代理服務,在此服務中實現如數據加解密、存取控制等安全策略;然后安全代理服務通過數據庫的訪問接口實現數據在庫中的最終存儲。安全代理服務存在于客戶端應用與數據庫存儲引擎之間,負責完成庫中數據的加解密工作,加密數據存儲在安全代理服務中。
這種技術也會存在一些問題和限制:
1)由于在安全增強代理中需要存儲加密數據,因此要解決與數據庫存儲數據的一致性問題,這基本不可實現。
2)數據的聯合檢索問題:由于在數據庫內外都存在數據,這些數據的聯合檢索將變得很困難;SQL語法的完全兼容也非常困難。
3)開發無法透明問題:數據庫協議雖然存在標準,但事實上每個不同的數據庫版本都會進行若干變更、擴展和增強,使用了這些特性的用戶必須進行改造。同時在安全代理中對數據庫通訊協議的模擬非常困難。
4)數據庫的優化處理、事務處理、并發處理等特性都無法使用:查詢分析、優化處理、事務處理、并發處理工作都需要在安全增強器中完成,無法使用數據庫在并發處理和查詢優化上的優勢,系統的性能和穩定性更多地依賴于安全代理;
5) 對于對存儲過程、觸發器、函數等存儲程序的實現支持也非常困難。
另外該技術需要在安全代理服務層提供非常復雜的數據庫管理功能,如:SQL命令解析,通訊服務,加密數據索引存儲管理、事務管理等等,因此存在巨大的開發工作量及很高的技術復雜度,此外還有類似于存儲過程、觸發器等無法解決的技術問題。
應用層加密的主要技術原理在于,應用系統通過加密API(JDBC,ODBC,C API等)對敏感數據進行加密,將加密數據存儲到數據庫的底層文件中;在進行數據檢索時,將密文數據取回客戶端,再進行解密。另外應用系統將自行管理密鑰體系。
這種方案也存在明顯缺陷,最主要的不足在于,應用程序必須對數據進行加解密,增加編程復雜度,而且無法對現有的系統做到透明,應用程序必須進行大規模的改造。從效率角度來看,這種技術方案無法利用數據庫的索引機制,加密后數據的檢索性能將產生大幅度下降。
這種技術使用“視圖”+“觸發器”+“擴展索引”+“外部調用”的方式實現數據加密,同時保證應用完全透明。它的核心思想是充分利用數據庫自身提供的應用定制擴展能力,分別使用其觸發器擴展能力、索引擴展能力、自定義函數擴展能力以及視圖等技術來滿足數據存儲加密,加密后數據檢索,對應用無縫透明等最主要需求。
這種方案的技術原理主要有以下四個方面
(1)通過視圖實現加密數據透明查詢處理
數據庫的視圖可以實現對表內數據的過濾、投影、聚集、關聯和函數運算。該方案正是通過數據庫的視圖原理實現對數據的透明訪問;首先對將原有的表進行改名,然后在該表上建立與原表同名的視圖;在視圖內實現對敏感列的解密函數調用,實現數據的解密。
(2)通過觸發器實現數據的加密插入和更新處理
數據庫中的觸發器可以實現對數據更新動作的特定行為的響應,同時數據庫中可以支持針對視圖的觸發器。這種方案在建立的視圖上建立Instead of觸發器,通過Instead of觸發器實現對明文數據的加密,將加密數據插入到表中。
(3)通過數據庫的擴展索引接口實現加密索引
以Oracle數據庫為例,在Oracle Data Cartridge的索引擴展機制提供了一套現成的框架,可以自己定義索引并實現Operator,自行編寫索引在Create Index、Insert、Delete、Update語句執行、以及Scan Index發生時的相應處理代碼。通過該機制,可以使用自定義的擴展加密索引,這樣當使用該索引對加密數據進行檢索時,可以進行正常的排序及比較,這也就解決了加密后數據檢索的難題,大幅度提升了密文檢索的效率。
(4)通過外部接口調用實現獨立于數據庫的權限控制和國產加密算法
在實現透明加密訪問和高效索引訪問之外,另一重要目的是實現對國產加密算法的調用和獨立于數據庫的權限控制。實現這一目的的技術關鍵是外部程序調用和外部通訊支持。在數據庫中支持外部程序調用,只要定義好通訊接口即可。那么這種方案可以將加密函數和解密函數做成外部調用,這樣不僅可以在外部調用國產加密設備的加密算法,還可以將權限校驗過程放在數據庫之外完成,確保了對超級用戶的權限限制。
目前國內領先數據庫安全廠商,安華金和數據庫加密產品DBCoffer采用的即是這種技術的典型代表。