我正在考虑加密 SQL Server 中的一些敏感数据,例如银行帐号和社会安全号码,以便遵守新的州法律。我使用 SQL Server 2008 作为带有 .NET 代码的数据库。我已经使用 .NET 来加密密码,但为此我正在考虑使用 Microsoft 的内置加密,只需使用简单的对称密钥加密来加密我需要的几列数据。如果我采用 SQL Server 加密,我可以从外部报告工具解密数据,而不仅仅是在我的 .NET 应用程序中。这是我正在使用的示例:http://blog.sqlauthority.com/2009/04/28/sql-server-introduction-to-sql-server-加密-and-对称-key-加密-tutorial-with-script/
它使用 SQL Server 创建的证书,然后使用 DecryptByKey 函数来解密数据,但我试图确定这到底有多安全?如何控制哪些用户可以解密数据,或者任何人只要打开对称密钥并使用解密功能就可以解密数据?
您有两种选择:
密码控制。这样,只有知道密码的用户才能解密数据。缺点是用户必须进入每次访问数据时的解密密码。报告必须包含一个密码参数,运行报告的用户将使用数据访问密码填充该参数。应用程序必须向用户请求密码。网站必须向访问者请求密码。等等等等
访问控制。数据使用 SQL Server 本身有权访问的密钥进行加密(最终加密链一直延伸到服务主密钥,并使用 DPAPI 进行加密)。除了授予和拒绝 SELECT 之外,这不会为您提供更多保护:access控制,而不是密码控制。这种方案仅防止介质意外丢失(有人找到了包含您的数据库的磁盘,或者您丢失了包含数据库的笔记本电脑)。您可以使用以下方法实现相同的效果透明数据加密或文件级加密(比特锁).
常见的数据加密场景是用对称密钥对数据进行加密,然后用非对称密钥(通常是证书的私钥)对对称密钥进行加密。然后,非对称密钥又用密码加密,并且在尝试访问数据时必须提供该密码。这种两级间接的主要原因是密码更改:当密码或私钥被泄露时,对称密钥将使用不同的非对称密钥重新加密,或者非对称密钥将使用不同的密码重新加密。这样访问密码就变了无需重新加密所有数据。如果直接授予对称密钥访问权限,则密码泄露可能需要重新加密所有密钥data,可能有 TB 级的数据。
我提出的两个场景的不同之处在于非对称密钥是否也使用数据库主密钥加密。情况 1) 不是,情况 2) 是。这一切都在加密层次结构.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)