教你如何在SQL Server數(shù)據(jù)庫中加密數(shù)據(jù)
導(dǎo)讀:為了防止某些別有用心的人從外部訪問SQL Server數(shù)據(jù)庫,盜取SQL Server數(shù)據(jù)庫中的用戶姓名、密碼、信用卡號(hào)等其他重要信息,在我們創(chuàng)建SQL Server數(shù)據(jù)庫驅(qū)動(dòng)的解決方案時(shí),我們首先需要考慮的的第一條設(shè)計(jì)決策就是如何加密存儲(chǔ)SQL Server數(shù)據(jù),以此來保證它的安全,免受被他人窺測。
SQL Server數(shù)據(jù)庫中有哪一種支持可以用于加密對(duì)象和數(shù)據(jù)?從一開始就討論一下SQL Server數(shù)據(jù)庫欠缺什么是明智的,或者是對(duì)于SQL Server數(shù)據(jù)庫中的加密部分你不應(yīng)該做什么。
首先,SQL Server數(shù)據(jù)庫有兩個(gè)內(nèi)置的密碼函數(shù)——即,pwdencrypt() 和 pwdcompare()。同時(shí),還有兩個(gè)SQL Server數(shù)據(jù)庫用來管理密碼哈希的沒有正式記錄的函數(shù):pwdencrypt() 將密碼哈希過后進(jìn)行存儲(chǔ); pwdcompare()將提供的字符串與哈希后的字符串進(jìn)行比較。不幸的是,這個(gè)哈希函數(shù)不是非常安全,它可以通過字典攻擊算法被破解(類似命令行應(yīng)用程序!)。
這些函數(shù)隨著SQL Server的版本發(fā)展而不斷進(jìn)行修改,這也是另一個(gè)沒有使用它們的原因。早期版本的SQL Server對(duì)密碼進(jìn)行的哈希,在后來的版本中無法解密,所以如果你依賴一個(gè)版本中的函數(shù),那么當(dāng)升級(jí)的時(shí)候,所有你的加密數(shù)據(jù)就都沒有用了,除非你可以首先對(duì)其解密——這也就違背了加密的最初的目的。
第二,你可能會(huì)嘗試去創(chuàng)建一個(gè)針對(duì)你的數(shù)據(jù)庫的自制的加密解決方案,但是有以下三個(gè)理由說明你不要這樣做:
除非你是加密專家,否則胡亂編寫的加密系統(tǒng)只會(huì)提供非常低級(jí)的價(jià)值不高的保護(hù)。新鮮的是,單向密碼哈?;蛘?"ROTx "形式的加密幾乎不需要費(fèi)事就可以被輕松打敗。
如果由于你自己的能力的缺乏而導(dǎo)致加密被破解,那么你的數(shù)據(jù)就完蛋了。你需要將所有的東西進(jìn)行沒有加密的備份,是嗎?(即使你加密了,那里有沒有安全漏洞?)
當(dāng)市面上提供有專業(yè)級(jí)別的,具有工業(yè)強(qiáng)度的加密解決方案的時(shí)候,你就不值得花費(fèi)時(shí)間去自己做。把你的時(shí)間用于構(gòu)建一個(gè)好的,堅(jiān)固的數(shù)據(jù)庫,而不是再重新發(fā)明一次車輪。
那么,什么才是好的加密數(shù)據(jù)的方式呢?
對(duì)于新手,微軟提供了一個(gè)自己生成的加密解決方案,CryptoAPI 。對(duì)于輕量級(jí)的加密,軍用級(jí)別的安全就不在考慮范圍之內(nèi),它具有相對(duì)容易實(shí)現(xiàn)的優(yōu)勢:管理員可以安裝一個(gè)名為CAPICOM 的ActiveX 控制,它可以在T-SQL存儲(chǔ)過程中提供CryptoAPI 功能。CAPICOM 支持各種類型的雙向加密和單向哈希算法,所以管理員可以挑選最適合應(yīng)用程序的問題的部分。
如果你對(duì)使用微軟的解決方案不感興趣,還有一些很好的第三方的方案可以使用。一家名為ActiveCrypt 的軟件有限責(zé)任公司制造了XP_CRYPT ,它是SQL Server的插件,可以在視圖、程序和觸發(fā)器中通過擴(kuò)展存儲(chǔ)過程和用戶自定義函數(shù)(在SQL Server 2000中)來完成加密。你可以下載一個(gè)支持無線的MD5,DES ,以及SHA1哈希的免費(fèi)版本的應(yīng)用程序; 其他的加密模型就是在比特深度上進(jìn)行的。(完全版本是無限的。)在你自己的代碼中,你可以使用XP_CRYPT,與ActiveX 控制一樣(在受限的免費(fèi)版本中)。對(duì)于ASP程序員來說,一個(gè)名為AspEncrypt 的組件提供了一種將高級(jí)加密整合到你的代碼中的簡單方式。
對(duì)數(shù)據(jù)庫文件自身進(jìn)行加密或者提供傳輸層上的安全保護(hù)怎么樣?對(duì)于前者,大家可以在Windows系統(tǒng)中持續(xù)使用加密文件系統(tǒng)。然而,你必須保存加密密鑰的備份,在出現(xiàn)問題的時(shí)候,這個(gè)數(shù)據(jù)有可能會(huì)丟失。對(duì)于后者,有IPSec和SQL Server自己的SSL加密,都是SQL Server和Windows自帶的大家的主要精力應(yīng)該放在避免以明文存儲(chǔ)敏感數(shù)據(jù),因?yàn)閺臄?shù)據(jù)庫中抽取沒有加密的數(shù)據(jù)同樣是最容易受到攻擊的薄弱環(huán)節(jié)。
SQL Server數(shù)據(jù)庫的安全防護(hù)工作時(shí)很重要的,希望大家能從上文中學(xué)到保障SQL Server數(shù)據(jù)庫安全的方法,做好SQL Server數(shù)據(jù)庫的安全工作,確保SQL Server數(shù)據(jù)庫中數(shù)據(jù)庫信息的絕對(duì)安全。
【編輯推薦】