我正在尝试使用加密保存有关数据库的敏感信息,并且所有用户都可以在加密后将其信息放入数据库,但只有privilidged用户才能解密并查看它。如何使用SQL Server 2008密钥/证书/加密机制实现它?
谢谢, EBE。
答案 0 :(得分:0)
也许在插入语句/过程中使用EXECUTE AS子句来进行加密。
或者您可以创建一个视图来解密数据,并仅授予对您的读取角色的访问权限。 我不确定是否会阻止插入用户通过其他方法解密。
答案 1 :(得分:0)
您不能也不应该隐藏实际保存它的用户的加密信息。更现实的情况是普通用户可以加密和解密他们自己的数据,而特权用户可以解密每个人的数据。
要实现此目的,请执行以下操作:
您会发现,最重要的问题是配置对称密钥,因为它必须由用户证书和管理员证书加密。这意味着管理员要么知道所有用户的证书密码(并且通常不能保留水,我希望这是显而易见的原因),或者您的应用程序必须实现一些非常复杂的过程来部署对称密钥。正确地执行该程序令人难以置信复杂。如果你有一个托管密钥(一个非常特权的密钥,通常存储在硬件中,以方便对称密钥配置),它会有很大的帮助,因为系统可以使用托管密钥打开对称密钥并添加用户和'admin '证书加密到密钥。
此方案允许通过加密方式分离对数据的访问,并且如您所见 extreamly 复杂。
另一种方法是通过授权方式分离访问。这仅仅意味着对所使用的密钥的访问由GRANT / DENY / REVOKE访问控制列表控制,并且用户可以基于对密钥的访问来加密和解密数据,但是密钥被解密为每个人(例如,它们被加密数据库主密钥和服务主密钥)。但这比密码分离要弱得多。通过使用透明数据库加密和通过GDR控制数据访问,您可以获得完全相同的效果,而复杂性只是其中的一小部分。
最后有一条你不应该采取的路径:在应用程序中嵌入密码。例如。有存储过程,打开密钥,保存数据,然后关闭密钥,其中嵌入证书访问密码,然后加密过程。这将给你一个很大的安全妄想,这就是我所说的。