前言:算法
在SQL Server 2005和SQL Server 2008以前。若是但願加密敏感數據,如財務信息、工資或身份證號,必須藉助外部應用程序或算法。SQL Server 2005引入內建數據加密的能力,使用證書、密鑰和系統函數的組合來完成。數據庫
與數字證書相似。SQL Server 證書包括公鑰和私鑰這一對密鑰,它們都用來加密和解密數據。SQL Server也擁有建立非對稱密鑰和對稱密鑰對象的能力。非對稱密鑰(asymmetric key)與證書類似,公鑰用來加密數據庫,私鑰用來解密數據。非對稱密鑰和證書都提供了強大的加密強度。但在完成複雜的加密|解密過程當中具備更多的性能開銷。更適合對大量數據進行加密,且具備較低性能開銷的解決方案是對稱密鑰(symmetric key),它是對相同數據進行加密和解密的一個密鑰。服務器
SQL Server容許將這些加密能力放到加密層次結構中。當安裝了SQL Server後,在數據庫master中建立名爲服務主密鑰的服務器級別證書,並將其默綁定到SQL Server服務帳號登陸名。服務主密鑰用來加密全部其餘數據庫證書和建立在SQL Server實例中的密鑰。另外,你也能夠在用戶數據庫中建立數據庫主密鑰(Database Master Key),它能夠用來加密數據庫證書和密鑰。函數
在SQL Server 2008中,微軟引入了透明數據加密(TDE),它對整個數據庫進行加密,而不須要修改任何訪問它的應用程序。數據、日誌文件和相關的數據庫備份都是加密的。假如數據庫被偷,若是沒有數據庫加密密鑰(DEK)是不能訪問數據的。性能
1、經過通行短語(PassPhrase)加密加密
對於不涉及證書及密鑰的應急的數據加密,能夠直接基於用戶提供的密碼來加密和解密數據。通行短語(PassPhrase)是容許存在空格的密碼。這個PassPhrase不會存儲在數據庫中,於是也就意味着不會被使用存儲的系統數據「破解」。同時,可使用空格建立一個長的、易於記憶的句子來加密和解密敏感數據。3d
咱們須要瞭解的一對函數是日誌
ENCRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms190357.aspx)對象
DECRYPTBYPASSPHRASE(http://technet.microsoft.com/zh-cn/library/ms188910.aspx)get
這一對函數必須使用相同的參數。
咱們看一個示例: