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