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