SQL Server 2005數(shù)據(jù)加密技術(shù)應(yīng)用研究_Mssql數(shù)據(jù)庫教程
推薦:SQL Server 2008 數(shù)據(jù)加載創(chuàng)世界記錄自今年2月推出的SQL Server 2008后 ,使用其SSIS( SQL Server Integration services)工具你可以就感覺到數(shù)據(jù)加載的世界級的性能記錄。微軟與Unisys公司宣布了一項紀(jì)錄,它是關(guān)于關(guān)系數(shù)據(jù)庫的數(shù)
數(shù)據(jù)加密是SQL Server 2005新增的數(shù)據(jù)安全特性,這對應(yīng)用程序開發(fā)者來說是非常重要的改進。本文從程序開發(fā)者角度,探討SQL Server 2005數(shù)據(jù)加密特性以及如何運用該特性保證系統(tǒng)的數(shù)據(jù)安全。
SQL Server 2005是微軟開始實施其“可信賴計算” 計劃以來的第一個主要的產(chǎn)品,它提供了豐富的安全特性,為企業(yè)數(shù)據(jù)提供安全保障。對開發(fā)人員來說,最關(guān)注的是如何在程序設(shè)計過程中應(yīng)用這些特性來保護數(shù)據(jù)庫中的數(shù)據(jù)安全。本文將從應(yīng)用程序開發(fā)者角度探討基于SQL Server 2005數(shù)據(jù)加密特性的應(yīng)用。
SQL Server 2005數(shù)據(jù)加密技術(shù)
數(shù)據(jù)用數(shù)字方式存儲在服務(wù)器中并非萬無一失。實踐證明有太多的方法可以智取SQL Server 2000認證保護,最簡單的是通過使用沒有口令的sa賬號。盡管SQL Server 2005遠比它以前的版本安全,但攻擊者還是有可能獲得存儲的數(shù)據(jù)。因此,數(shù)據(jù)加密成為更徹底的數(shù)據(jù)保護戰(zhàn)略,即使攻擊者得以存取數(shù)據(jù),還不得不解密,因而對數(shù)據(jù)增加了一層保護。
SQL Server 2000以前的版本沒有內(nèi)置數(shù)據(jù)加密功能,若要在SQL Server 2000中進行數(shù)據(jù)加密,不得不買第三家產(chǎn)品,然后在服務(wù)器外部作COM調(diào)用或者是在數(shù)據(jù)送服務(wù)器之前在客戶端的應(yīng)用中執(zhí)行加密。這意味著加密的密鑰或證書不得不由加密者自己負責(zé)保護,而保護密鑰是數(shù)據(jù)加密中最難的事,所以即使很多應(yīng)用中數(shù)據(jù)已被很強的加密過,數(shù)據(jù)保護仍然很弱。
SQL Server 2005通過將數(shù)據(jù)加密作為數(shù)據(jù)庫的內(nèi)在特性解決了這個問題。它除了提供多層次的密鑰和豐富的加密算法外,最大的好處是用戶可以選擇數(shù)據(jù)服務(wù)器管理密鑰。SQL Server 2005服務(wù)器支持的加密算法如下:
⑴ 對稱式加密(Symmetric Key Encryption):
對稱式加密方式對加密和解密使用相同的密鑰。通常,這種加密方式在應(yīng)用中難以實施,因為用同一種安全方式共享密鑰很難。但當(dāng)數(shù)據(jù)儲存在SQL Server中時,這種方式很理想,你可以讓服務(wù)器管理它。SQL Server 2005 提供RC4、RC2、DES 和 AES 系列加密算法。
⑵ 非對稱密鑰加密(Asymmetric Key Encryption):
非對稱密鑰加密使用一組公共/私人密鑰系統(tǒng),加密時使用一種密鑰,解密時使用另一種密鑰。公共密鑰可以廣泛的共享和透露。當(dāng)需要用加密方式向服務(wù)器外部傳送數(shù)據(jù)時,這種加密方式更方便。SQL Server 2005 支持 RSA 加密算法以及 512 位、1,024 位和 2,048 位的密鑰強度。
⑶ 數(shù)字證書(Certificate):
數(shù)字證書是一種非對稱密鑰加密,但是,一個組織可以使用證書并通過數(shù)字簽名將一組公鑰和私鑰與其擁有者相關(guān)聯(lián)。SQL Server 2005 支持“因特網(wǎng)工程工作組”(IETF) X.509 版本 3 (X.509v3) 規(guī)范。一個組織可以對 SQL Server 2005 使用外部生成的證書,或者可以使用 SQL Server 2005 生成證書。
SQL Server 2005 采用多級密鑰來保護它內(nèi)部的密鑰和數(shù)據(jù),如下圖所示:
圖1 SQL Server 2005采用多級密鑰保護它內(nèi)部的密鑰和數(shù)據(jù)
圖中引出箭頭的密鑰或服務(wù)用于保護箭頭所指的密鑰。所以服務(wù)主密鑰(service master key)保護數(shù)據(jù)庫主密鑰(database master keys),而數(shù)據(jù)庫主密鑰又保護證書(certificates)和非對稱密鑰(asymmetric keys)。而最底層的對稱性密鑰(symmetric keys)被證書、非對稱密鑰或其他的對稱性密鑰保護(箭頭又指回它本身)。用戶只需通過提供密碼來保護這一系列的密鑰。
圖中頂層的服務(wù)主密鑰,安裝SQL Server 2005新實例時自動產(chǎn)生和安裝,用戶不能刪除此密鑰,但數(shù)據(jù)庫管理員能對它進行基本的維護,如備份該密鑰到一個加密文件,當(dāng)其危及到安全時更新它,恢復(fù)它。
服務(wù)主密鑰由DPAPI(Data Protection API)管理。DPAPI在Windows 2000 中引入,建立于Windows的Crypt32 API之上。SQL Server 2005 管理與DPAPI的接口。服務(wù)主密鑰本身是對稱式加密,用來加密服務(wù)器中的數(shù)據(jù)庫主密鑰。
數(shù)據(jù)庫主密鑰與服務(wù)主密鑰不同,在加密數(shù)據(jù)庫中數(shù)據(jù)之前,必須由數(shù)據(jù)庫管理員創(chuàng)建數(shù)據(jù)庫主密鑰。通常管理員在產(chǎn)生該密鑰時,提供一個口令,所以它用口令和服務(wù)主密鑰來加密。如果有足夠的權(quán)限,用戶可以在需要時顯式地或自動地打開該密鑰。下面是產(chǎn)生數(shù)據(jù)庫主密鑰的T-SQL代碼示例:
| 以下為引用的內(nèi)容: USE EncryptionDB CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'UTY6%djzZ8S7RyL' |
每個數(shù)據(jù)庫只有一個數(shù)據(jù)庫主密鑰。可以用ALTER MASTR KEY語句來刪除加密,更改口令或刪除數(shù)據(jù)庫主密鑰。通常這由數(shù)據(jù)庫管理員來負責(zé)做這些。
有了數(shù)據(jù)庫主密鑰,就可以著手加密數(shù)據(jù)。T-SQL有置于其內(nèi)的加密支持。使用CREATE語句創(chuàng)建各種密碼,ALTER語句修改他們。例如要創(chuàng)建對稱式加密,可以通過一對函數(shù)EncryptByKey 和 DecryptByKey來完成。
數(shù)據(jù)加密技術(shù)應(yīng)用解析
下面通過實例來探討SQL Server 2005數(shù)據(jù)加密與解密技術(shù)的實現(xiàn)。
假設(shè)有一張Customer 表,表中有字段 customer ID、 name、 city 和各種信用卡細節(jié)。其中信用卡細節(jié)需要加密而其他數(shù)據(jù)不需要。假設(shè)User1有對稱式密鑰,并用該密鑰登錄,運行相應(yīng)的代碼加密數(shù)據(jù)。
⑴ 數(shù)據(jù)加密
① 產(chǎn)生密鑰:在含有Customers 表的數(shù)據(jù)庫中使用Triple DES作為加密算法,生成對稱式密鑰。本例中,密鑰本身由已經(jīng)存在在數(shù)據(jù)庫中的證書保護,如圖一所示,對稱密碼受非對稱密碼和存在的其他對稱式密鑰保護。
| 以下為引用的內(nèi)容: CREATE SYMMETRIC KEY User1SymmetricKeyCert AUTHORIZATION User1 WITH ALGORITHM = TRIPLE_DES ENCRYPTION BY CERTIFICATE User1Certificate |
② 打開密鑰:對稱式密鑰使用前必須顯式打開,所以接下來打開它,重新找回密碼,解密它,并放它在受保護的服務(wù)器內(nèi)存中,準(zhǔn)備使用。
| 以下為引用的內(nèi)容: OPEN SYMMETRIC KEY User1SymmetricKeyCert DECRYPTION BY CERTIFICATE User1Certificate |
③ 加密數(shù)據(jù):在下面的代碼中,使用正常的T-SQL INSERT語句將一行數(shù)據(jù)插入表中,id、name和city 用明文保存,信用卡類型、號碼以及有潛在機密的客戶注釋用加密方式儲存,用Triple DES加密算法加密數(shù)據(jù)。
| 以下為引用的內(nèi)容: INSERT INTO Customer VALUES (4, 'John Doe', 'Fairbanks', EncryptByKey(Key_GUID( 'User1SymmetricKeyCert'), 'Amex'), EncryptByKey(Key_GUID( 'User1SymmetricKeyCert'), '1234-5678-9009-8765'), EncryptByKey(Key_GUID( 'User1SymmetricKeyCert'), 'Window shopper. Spends $5 at most.')) |
加密完成后,關(guān)閉它,釋放內(nèi)存,以防它被誤用。
CLOSE SYMMETRIC KEY User1SymmetricKeyCert
以上是整個的數(shù)據(jù)加密的操作過程。它沒有混亂的密碼管理,也不用調(diào)用特別的算法。儲存加密數(shù)據(jù)的字段是varbinary類型數(shù)據(jù),其長度足以儲存擴展的數(shù)據(jù)(加密數(shù)據(jù)比明文需要更多的空間,有時候多很多)。
⑵ 數(shù)據(jù)解密
要解密已加密的數(shù)據(jù),你需要重新打開對稱式加密。使用DecryptByKey函數(shù)讀數(shù)據(jù),然后關(guān)閉對稱式加密。結(jié)果及相應(yīng)的代碼如下。
| 以下為引用的內(nèi)容: OPEN SYMMETRIC KEY User1SymmetricKeyCert DECRYPTION BY CERTIFICATE User1Certificate SELECT CustID, Name, City, CONVERT(VARCHAR, DecryptByKey(CreditCardType)) AS CardType, CONVERT(VARCHAR, DecryptByKey(CreditCardNumber)) AS CardNumber, CONVERT(VARCHAR, DecryptByKey(Notes)) AS Notes FROM Customer WHERE CustID = 4 CLOSE SYMMETRICKEYUser1SymmetricKeyCert |
這個例子顯示了讓SQL Server 2005為你管理密鑰的一種方法。但實際上,用戶總是選擇自己提供一個口令的方式,用RC4算法產(chǎn)生對稱密碼。代碼如下:
| 以下為引用的內(nèi)容: CREATE SYMMETRIC KEY User2SymmetricKeyPwd AUTHORIZATION User2 WITH ALGORITHM = RC4 ENCRYPTION BY PASSWORD = 'sdylvxF&imeG3FP' |
SQL Server 2005產(chǎn)生一個基于用戶提供的口令的密鑰來加密數(shù)據(jù)。除非明確指定,否則口令不保存在SQL Server 2005中,用戶必須保護好自己的口令,否則任何一個知道口令的人都可以解密數(shù)據(jù)。
如果認為對存儲在數(shù)據(jù)庫中的數(shù)據(jù)加密完全是浪費處理器時間和存儲空間那就錯了。SQL Server 2005中的數(shù)據(jù)加密是一個非凡的特性,它為客戶的數(shù)據(jù)提供了一個重要的保護層。但應(yīng)用時要注意,只對那些敏感機密的數(shù)據(jù)進行保護,因為加密消耗服務(wù)器處理器大量的資源,如果對一個有一千萬條記錄的表的每個字段都加密的話,運行一條沒有Where 子句的SELECT 就可能導(dǎo)致服務(wù)器性能的崩潰。
分享:SQL Server 2005 CE軟件環(huán)境需求由于SQL Server 2005 Compact Edition和SQL Server 2005是同時代的產(chǎn)品,所以它們之間的互操作和結(jié)合性較之以前的SQL Server版本要好,為此如果要考慮使用SQL Server 2005 Compact Edition中的
- sql 語句練習(xí)與答案
- 深入C++ string.find()函數(shù)的用法總結(jié)
- SQL Server中刪除重復(fù)數(shù)據(jù)的幾個方法
- sql刪除重復(fù)數(shù)據(jù)的詳細方法
- SQL SERVER 2000安裝教程圖文詳解
- 使用sql server management studio 2008 無法查看數(shù)據(jù)庫,提示 無法為該請求檢索數(shù)據(jù) 錯誤916解決方法
- SQLServer日志清空語句(sql2000,sql2005,sql2008)
- Sql Server 2008完全卸載方法(其他版本類似)
- sql server 2008 不允許保存更改,您所做的更改要求刪除并重新創(chuàng)建以下表
- SQL Server 2008 清空刪除日志文件(瞬間日志變幾M)
- Win7系統(tǒng)安裝MySQL5.5.21圖解教程
- 將DataTable作為存儲過程參數(shù)的用法實例詳解
Mssql數(shù)據(jù)庫教程Rss訂閱編程教程搜索
Mssql數(shù)據(jù)庫教程推薦
猜你也喜歡看這些
- mysql創(chuàng)建新用戶的命令
- 解析MYSQL 數(shù)據(jù)庫導(dǎo)入SQL 文件出現(xiàn)亂碼的問題
- 解析如何使用Zend Framework 連接數(shù)據(jù)庫
- SQL語句替換字段中的換行符,回車符
- 網(wǎng)站模板:利用Shell腳本實現(xiàn)遠程MySQL自動查詢
- Mysql中“Insert into xxx on duplicate key update”問題
- 網(wǎng)站模板:以數(shù)據(jù)庫字段分組顯示數(shù)據(jù)的sql語句
- mysql 超大數(shù)據(jù)/表管理技巧
- 網(wǎng)頁模板MySQL出現(xiàn)Can't create/write to file 'C:\Windows\TEMP\#sql_990_0.MYI解決辦法
- MySQL筆記之運算符使用詳解
- 相關(guān)鏈接:
- 教程說明:
Mssql數(shù)據(jù)庫教程-SQL Server 2005數(shù)據(jù)加密技術(shù)應(yīng)用研究
。