數據庫主密鑰與服務主密鑰不同,在加密數據庫中數據之前,必須由數據庫管理員創(chuàng)建數據庫主密鑰。通常管理員在產生該密鑰時,提供一個口令,所以它用口令和服務主密鑰來加密。如果有足夠的權限,用戶可以在需要時顯式地或自動地打開該密鑰。下面是產生數據庫主密鑰的T-SQL代碼示例:
USE EncryptionDB
CREATE MASTER KEY
ENCRYPTION BY PASSWORD = 'UTY6%djzZ8S7RyL'
每個數據庫只有一個數據庫主密鑰。可以用ALTER MASTR KEY語句來刪除加密,更改口令或刪除數據庫主密鑰。通常這由數據庫管理員來負責做這些。
有了數據庫主密鑰,就可以著手加密數據。T-SQL有置于其內的加密支持。使用CREATE語句創(chuàng)建各種密碼,ALTER語句修改他們。例如要創(chuàng)建對稱式加密,可以通過一對函數EncryptByKey 和 DecryptByKey來完成。
數據加密技術應用解析
下面通過實例來探討SQL Server 2005數據加密與解密技術的實現。
假設有一張Customer 表,表中有字段 customer ID、 name、 city 和各種信用卡細節(jié)。其中信用卡細節(jié)需要加密而其他數據不需要。假設User1有對稱式密鑰,并用該密鑰登錄,運行相應的代碼加密數據。
⑴ 數據加密
① 產生密鑰:在含有Customers 表的數據庫中使用Triple DES作為加密算法,生成對稱式密鑰。本例中,密鑰本身由已經存在在數據庫中的證書保護,如圖一所示,對稱密碼受非對稱密碼和存在的其他對稱式密鑰保護。
CREATE SYMMETRIC KEY User1SymmetricKeyCert
AUTHORIZATION User1
WITH ALGORITHM = TRIPLE_DES
ENCRYPTION BY CERTIFICATE User1Certificate
② 打開密鑰:對稱式密鑰使用前必須顯式打開,所以接下來打開它,重新找回密碼,解密它,并放它在受保護的服務器內存中,準備使用。
OPEN SYMMETRIC KEY User1SymmetricKeyCert
DECRYPTION BY CERTIFICATE User1Certificate
③ 加密數據:在下面的代碼中,使用正常的T-SQL INSERT語句將一行數據插入表中,id、name和city 用明文保存,信用卡類型、號碼以及有潛在機密的客戶注釋用加密方式儲存,用Triple DES加密算法加密數據。
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.'))
加密完成后,關閉它,釋放內存,以防它被誤用。
CLOSE SYMMETRIC KEY User1SymmetricKeyCert
以上是整個的數據加密的操作過程。它沒有混亂的密碼管理,也不用調用特別的算法。儲存加密數據的字段是varbinary類型數據,其長度足以儲存擴展的數據(加密數據比明文需要更多的空間,有時候多很多)。
下圖為對Customer 表運行正常的SELECT * 語句顯示的帶有加密數據的結果: