前言:算法
在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
这一对函数必须使用相同的参数。
咱们看一个示例: