摘要 數據加密是SQL Server 2005新增的數據安全特性,這對應用程序開發者來說是非常重要的改進。本文從程序開發者角度,探討SQL Server 2005數據加密特性以及如何運用該特性保證系統的數據安全。
關鍵詞 SQL Server 2005、數據加密、數據安全
SQL Server 2005是微軟開始實施其“可信賴計算” 計劃以來的第一個主要的產品,它提供了豐富的安全特性,為企業數據提供安全保障。對開發人員來說,最關注的是如何在程序設計過程中應用這些特性來保護數據庫中的數據安全。本文將從應用程序開發者角度探討基于SQL Server 2005數據加密特性的應用。
SQL Server 2005數據加密技術
數據用數字方式存儲在服務器中并非萬無一失。實踐證明有太多的方法可以智取SQL Server 2000認證保護,最簡單的是通過使用沒有口令的sa賬號。盡管SQL Server 2005遠比它以前的版本安全,但攻擊者還是有可能獲得存儲的數據。因此,數據加密成為更徹底的數據保護戰略,即使攻擊者得以存取數據,還不得不解密,因而對數據增加了一層保護。
SQL Server 2000以前的版本沒有內置數據加密功能,若要在SQL Server 2000中進行數據加密,不得不買第三家產品,然后在服務器外部作COM調用或者是在數據送服務器之前在客戶端的應用中執行加密。這意味著加密的密鑰或證書不得不由加密者自己負責保護,而保護密鑰是數據加密中最難的事,所以即使很多應用中數據已被很強的加密過,數據保護仍然很弱。
SQL Server 2005通過將數據加密作為數據庫的內在特性解決了這個問題。它除了提供多層次的密鑰和豐富的加密算法外,最大的好處是用戶可以選擇數據服務器管理密鑰。SQL Server 2005服務器支持的加密算法如下:
⑴ 對稱式加密(Symmetric Key Encryption):
對稱式加密方式對加密和解密使用相同的密鑰。通常,這種加密方式在應用中難以實施,因為用同一種安全方式共享密鑰很難。但當數據儲存在SQL Server中時,這種方式很理想,你可以讓服務器管理它。SQL Server 2005 提供RC4、RC2、DES 和 AES 系列加密算法。
⑵ 非對稱密鑰加密(Asymmetric Key Encryption):
非對稱密鑰加密使用一組公共/私人密鑰系統,加密時使用一種密鑰,解密時使用另一種密鑰。公共密鑰可以廣泛的共享和透露。當需要用加密方式向服務器外部傳送數據時,這種加密方式更方便。SQL Server 2005 支持 RSA 加密算法以及 512 位、1,024 位和 2,048 位的密鑰強度。
⑶ 數字證書(Certificate):
數字證書是一種非對稱密鑰加密,但是,一個組織可以使用證書并通過數字簽名將一組公鑰和私鑰與其擁有者相關聯。SQL Server 2005 支持“因特網工程工作組”(IETF) X.509 版本 3 (X.509v3) 規范。一個組織可以對 SQL Server 2005 使用外部生成的證書,或者可以使用 SQL Server 2005 生成證書。
SQL Server 2005 采用多級密鑰來保護它內部的密鑰和數據,如下圖所示:

圖1 SQL Server 2005采用多級密鑰保護它內部的密鑰和數據
服務主密鑰由DPAPI(Data Protection API)管理。DPAPI在Windows 2000 中引入,建立于Windows的Crypt32 API之上。SQL Server 2005 管理與DPAPI的接口。服務主密鑰本身是對稱式加密,用來加密服務器中的數據庫主密鑰。
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'UTY6%djzZ8S7RyL'
AUTHORIZATION User1
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY CERTIFICATE User1Certificate
DECRYPTION BY CERTIFICATE User1Certificate
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.'))

圖2 加密后的數據的查詢結果
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

圖3 對加密數據進行解密后的結果
AUTHORIZATION User2
WITH ALGORITHM = RC4
ENCRYPTION BY PASSWORD = 'sdylvxF&imeG3FP'