我正在考虑加密SQL Server中的一些敏感数据,例如银行帐号和社会安全号码,以符合新的州法律。我使用SQL Server 2008作为我的.NET代码数据库。我使用.NET加密密码,但为此我想通过简单的对称密钥加密加密我需要的几列数据来使用微软的内置加密。如果我使用SQL Server加密,我可以解密来自外部报告工具的数据,而不仅仅是在我的.NET应用程序中。这是我正在使用的示例: http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-encryption-and-symmetric-key-encryption-tutorial-with-script/
它使用由SQL Server创建的证书,然后使用DecryptByKey函数来解密数据,但我正在尝试确定这是多么安全?我如何控制用户可以解密数据的内容,或者只要他们打开对称密钥并使用解密函数,任何人都可以这样做?
答案 0 :(得分:12)
您有两种选择:
加密控制。只有这一点,知道密码的用户才能解密数据。缺点是用户每次访问数据时都必须输入解密密码。报告必须包含一个Password参数,运行报告的用户填写数据访问密码。应用程序必须从用户请求密码。网站必须向访问者请求密码。等等等等
访问控制。数据使用SQL Server本身可以访问的密钥加密(最终,ecnryption链一直到服务主密钥,并使用DPAPI加密)。除了授予和拒绝SELECT给你之外,这给你没有更大的保护:访问控制,而不是加密控制。这样的方案只能防止意外丢失媒体(有人发现你的数据库中有一个磁盘,或者你松开了带有数据库的笔记本电脑)。您可以使用Transparent Data Encryption或文件级加密(BitLocker)来实现相同的目标。
通用数据加密方案是使用对称密钥加密数据,然后使用非对称密钥(通常是证书的私钥)加密对称密钥。然后使用密码对非对称密钥进行加密,并且在尝试访问数据时必须提供此密码。这种两级间接的主要原因是密码更改:当密码或私钥被破坏时,对称密钥使用不同的非对称密钥重新加密,或者使用不同的密码重新加密非对称密钥。这样,访问密码已经更改,而无需重新加密所有数据。如果访问权限直接授予对称密钥,那么密码泄露可能需要重新加密所有数据,可能是数TB的数据。
我提出的两个场景的不同之处在于非对称密钥是否也是用数据库主密钥进行的。案例1)它不是,案例2)它是。这一切都在Encryption Hierarchy中解释。