使用一般的加密方法只能加密數(shù)據(jù)表中的某些字段。如果想對整個數(shù)據(jù)庫進行加密,就需要使用透明加密技術(shù)(TDE)。這是 SQL Server 2008 R2提供的新功能之一。因為如果MDF數(shù)據(jù)庫文件或備份文件被竊取,數(shù)據(jù)庫的安全就無從談起。透明加密運行在數(shù)據(jù)庫級別,對于用戶或者應(yīng)用程序來說是透明的,猶如沒有加密一樣。加密和解密以數(shù)據(jù)庫的最小存儲單位(即頁級別)進行,由數(shù)據(jù)庫引擎實時加以執(zhí)行。在數(shù)據(jù)寫入時加密,在讀取時解密。
TDE執(zhí)行數(shù)據(jù)和日志文件的實時I/O加解密,當(dāng)數(shù)據(jù)庫文件被盜后,別人因為不知道密鑰的情況下,是無法恢復(fù)或者附加數(shù)據(jù)庫的。透明數(shù)據(jù)加密使用數(shù)據(jù)加密密鑰(DEK)進行加密,DEK保存在Master數(shù)據(jù)庫中并且由服務(wù)主密鑰加以保護。其使用步驟是先創(chuàng)建主密鑰,之后創(chuàng)建或獲取由主密鑰保護的證書,創(chuàng)建數(shù)據(jù)庫加密密鑰,并使用證書保護該密鑰,最后將數(shù)據(jù)庫設(shè)置為使用加密狀態(tài)。
對于透明加密來說,會對整個數(shù)據(jù)庫進行加密,包括對備份文件也進行了加密。而對于應(yīng)用程序來說,不會受到加密和解密的任何影響,例如索引和數(shù)據(jù)類型不受影響,也不需要調(diào)用任何加解密函數(shù)等。當(dāng)然,使用透明加密會對SQL Server性能有一定的影響,透明加密和壓縮備份無法同時使用,當(dāng)移動受到透明加密保護的數(shù)據(jù)庫時,必須同時移動相關(guān)的證書或者非對稱密鑰。例如,當(dāng)需要對名為“Clientzl”的數(shù)據(jù)庫進行透明加密時, 執(zhí) 行“USE master”,“GO”,“CREATE MASTER KEY ENCRYPTION BY PASSWORD ='Passw0rd'”語句,來創(chuàng)建數(shù)據(jù)庫主密鑰。執(zhí)行“CREATE CERTIFICATE ClientzlCert WITH SUBJECT = 'My Certificate for Northwind database'”語句,創(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” 等 語句,使用上述證書創(chuàng)建一個數(shù)據(jù)庫加密密鑰和密碼。之后 執(zhí) 行“ALTER DATABASE Clientzl SET ENCRYPTION ON”語句,激活針對該數(shù)據(jù)庫的透明加密功能。這樣,就可以將數(shù)據(jù)庫保護起來。例如,執(zhí)行“BACKUP DATABASE Clientzl TO DISK= 'd:ackupClientzl_encrypted.bak'”語 句,就可以創(chuàng)建加密型的備份文件了。當(dāng)然,由于使用的是TDE技術(shù),所以加密備份花費的時間會比未加密的備份稍長一些。但是,別人即使盜取了該備份文件,也無法將其恢復(fù),SQL Server會提示找不到服務(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”等語句,將證書文件導(dǎo)出來。在另外的SQL Server實例上執(zhí)行“USE master”,“GO”,“CREATE MASTER KEY ENCRYPTION BY PASSWORD ='password01!'”,“GO”等 語句,創(chuàng)建數(shù)據(jù)庫主密鑰,注意其使用的密碼和上述主密鑰是不同的。
執(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”等語句來導(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”之類的語句,即可恢復(fù)加密的備份文件。