如何控制用户可以解密SQL Server对称密钥加密的内容

Jef*_*ock 8 sql-server security encryption sql-server-2008

我正在研究加密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-脚本/

它使用由SQL Server创建的证书,然后使用DecryptByKey函数来解密数据,但我正在尝试确定这是多么安全?我如何控制用户可以解密数据的内容,或者只要他们打开对称密钥并使用解密功能,任何人都可以执行此操作?

Rem*_*anu 12

你有两个选择:

  1. 密码控制.只有这一点,知道密码的用户才能解密数据.缺点是用户每次访问数据时都必须输入解密密码.报告必须包含一个Password参数,运行报告的用户填写数据访问密码.应用程序必须从用户请求密码.网站必须向访问者请求密码.等等等等

  2. 访问控制.数据使用SQL Server本身可以访问的密钥加密(最终,ecnryption链一直到服务主密钥,并使用DPAPI加密).除了授予和拒绝SELECT给你之外,这给你没有更大的保护:是访问控制,而不是加密控制.这样的方案只能防止意外丢失媒体(有人发现你的数据库有一个磁盘,或者你的笔记本电脑上有数据库).您可以使用透明数据加密或文件级加密(BitLocker)实现相同的功能.

通用数据加密方案是使用对称密钥加密数据,然后使用非对称密钥(通常是证书的私钥)加密对称密钥.然后使用密码对非对称密钥进行加密,并且在尝试访问数据时必须提供此密码.这种两级间接的主要原因是密码更改:当密码或私钥被破坏时,对称密钥使用不同的非对称密钥重新加密,或者使用不同的密码重新加密非对称密钥.这样,访问密码已更改,无需重新加密所有数据.如果访问权限将直接授予对称密钥,则密码泄露可能需要重新加密所有数据,可能是数TB的数据.

我提出的两个场景的不同之处在于非对称密钥是否也与数据库主密钥一起使用.情况1)它不是,情况2)它是.这在加密层次结构中都有解释.