使用一般的加密方法只能加密數(shù)據(jù)表中的某些字段。如果想對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行加密,就需要使用透明加密技術(shù)(TDE)。這是 SQL Server 2008 R2提供的新功能之一。因?yàn)槿绻鸐DF數(shù)據(jù)庫(kù)文件或備份文件被竊取,數(shù)據(jù)庫(kù)的安全就無(wú)從談起。透明加密運(yùn)行在數(shù)據(jù)庫(kù)級(jí)別,對(duì)于用戶或者應(yīng)用程序來(lái)說是透明的,猶如沒有加密一樣。加密和解密以數(shù)據(jù)庫(kù)的最小存儲(chǔ)單位(即頁(yè)級(jí)別)進(jìn)行,由數(shù)據(jù)庫(kù)引擎實(shí)時(shí)加以執(zhí)行。在數(shù)據(jù)寫入時(shí)加密,在讀取時(shí)解密。
TDE執(zhí)行數(shù)據(jù)和日志文件的實(shí)時(shí)I/O加解密,當(dāng)數(shù)據(jù)庫(kù)文件被盜后,別人因?yàn)椴恢烂荑€的情況下,是無(wú)法恢復(fù)或者附加數(shù)據(jù)庫(kù)的。透明數(shù)據(jù)加密使用數(shù)據(jù)加密密鑰(DEK)進(jìn)行加密,DEK保存在Master數(shù)據(jù)庫(kù)中并且由服務(wù)主密鑰加以保護(hù)。其使用步驟是先創(chuàng)建主密鑰,之后創(chuàng)建或獲取由主密鑰保護(hù)的證書,創(chuàng)建數(shù)據(jù)庫(kù)加密密鑰,并使用證書保護(hù)該密鑰,最后將數(shù)據(jù)庫(kù)設(shè)置為使用加密狀態(tài)。
對(duì)于透明加密來(lái)說,會(huì)對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行加密,包括對(duì)備份文件也進(jìn)行了加密。而對(duì)于應(yīng)用程序來(lái)說,不會(huì)受到加密和解密的任何影響,例如索引和數(shù)據(jù)類型不受影響,也不需要調(diào)用任何加解密函數(shù)等。當(dāng)然,使用透明加密會(huì)對(duì)SQL Server性能有一定的影響,透明加密和壓縮備份無(wú)法同時(shí)使用,當(dāng)移動(dòng)受到透明加密保護(hù)的數(shù)據(jù)庫(kù)時(shí),必須同時(shí)移動(dòng)相關(guān)的證書或者非對(duì)稱密鑰。例如,當(dāng)需要對(duì)名為“Clientzl”的數(shù)據(jù)庫(kù)進(jìn)行透明加密時(shí), 執(zhí) 行“USE master”,“GO”,“CREATE MASTER KEY ENCRYPTION BY PASSWORD ='Passw0rd'”語(yǔ)句,來(lái)創(chuàng)建數(shù)據(jù)庫(kù)主密鑰。執(zhí)行“CREATE CERTIFICATE ClientzlCert WITH SUBJECT = 'My Certificate for Northwind database'”語(yǔ)句,創(chuàng)建名為“ClientzlCert”的證書。
執(zhí) 行“USE Clientzl”,“GO”,“CREATE DATABASE E N C R Y P T I O N K E Y W I T H A L G O R I T H M =AES_128 ENCRYPTION BY SERVER CERTIFICATE ClientzlCert”,“GO” 等 語(yǔ)句,使用上述證書創(chuàng)建一個(gè)數(shù)據(jù)庫(kù)加密密鑰和密碼。之后 執(zhí) 行“ALTER DATABASE Clientzl SET ENCRYPTION ON”語(yǔ)句,激活針對(duì)該數(shù)據(jù)庫(kù)的透明加密功能。這樣,就可以將數(shù)據(jù)庫(kù)保護(hù)起來(lái)。例如,執(zhí)行“BACKUP DATABASE Clientzl TO DISK= 'd:ackupClientzl_encrypted.bak'”語(yǔ) 句,就可以創(chuàng)建加密型的備份文件了。當(dāng)然,由于使用的是TDE技術(shù),所以加密備份花費(fèi)的時(shí)間會(huì)比未加密的備份稍長(zhǎng)一些。但是,別人即使盜取了該備份文件,也無(wú)法將其恢復(fù),SQL Server會(huì)提示找不到服務(wù)器證書。如果需要正常恢復(fù)該加密備份,必須得到相應(yīng)的證書。
方 法 是 執(zhí) 行“USE master”,“GO”,“BACKUP CERTIFICATE ClientzlCert TO FILE = 'd:zhengshuClientzlCert.cer WITH PRIVATE KEY (FILE ='d:zhengshuClientzl_Key.pvk' ENCRYPTION BY PASSWORD = 'passw0rd' )”,“GO”等語(yǔ)句,將證書文件導(dǎo)出來(lái)。在另外的SQL Server實(shí)例上執(zhí)行“USE master”,“GO”,“CREATE MASTER KEY ENCRYPTION BY PASSWORD ='password01!'”,“GO”等 語(yǔ)句,創(chuàng)建數(shù)據(jù)庫(kù)主密鑰,注意其使用的密碼和上述主密鑰是不同的。
執(zhí) 行“C R E A T E CERTIFICATE ClientzlCert F R O M F I L E = ' d:zhengshuClientzlCert.cer WITH PRIVATE KEY(FILE = ' d:zhengshuClientzl_Key.pvk 'DECRYPTION BY PASSWORD= ' passw0rd ')”,“GO”等語(yǔ)句來(lái)導(dǎo)入證書。注意,這里的主密鑰必須與導(dǎo)出證書是使用的密碼相同。有了證書的支持,就可以恢復(fù)加密的備份文件了,例如執(zhí) 行“restore database Clientzl from DISK =' d:ackupClientzl_encrypted.bak ' with replace MOVE 'Clientzl'TO 'd:dbClientzl1.mdf' MOVE 'Northwind_log' TO 'd:dbClientzl_1.ldf'”,“GO”之類的語(yǔ)句,即可恢復(fù)加密的備份文件。