在SQL Server中分离加密和解密权限

时间:2010-01-27 17:25:09

标签: sql-server encryption certificate key

我正在尝试使用加密保存有关数据库的敏感信息,并且所有用户都可以在加密后将其信息放入数据库,但只有privilidged用户才能解密并查看它。如何使用SQL Server 2008密钥/证书/加密机制实现它?

谢谢, EBE。

2 个答案:

答案 0 :(得分:0)

也许在插入语句/过程中使用EXECUTE AS子句来进行加密。

或者您可以创建一个视图来解密数据,并仅授予对您的读取角色的访问权限。 我不确定是否会阻止插入用户通过其他方法解密。

答案 1 :(得分:0)

您不能也不应该隐藏实际保存它的用户的加密信息。更现实的情况是普通用户可以加密和解密他们自己的数据,而特权用户可以解密每个人的数据。

要实现此目的,请执行以下操作:

  • 数据使用对称密钥加密(情况一直如此)
  • 每个用户使用不同的对称密钥
  • 对称密钥由属于用户的证书加密,该证书通过密码加密
  • 使用应用程序时,用户输入其证书解密密码,应用程序在其会话中打开证书,从而授予访问权限以解密对称密钥,从而允许会话加密新数据并解密自己的数据
  • 重要部分:所有对称密钥也使用单个“管理员”证书加密,此“管理员”证书使用密码加密
  • 只有特权用户才知道管理员证书密码
  • 当管理员使用该应用程序时,他们输入管理员证书密码,从而获得所有对称密钥的访问权限,并且能够解密所有数据

您会发现,最重要的问题是配置对称密钥,因为它必须由用户证书和管理员证书加密。这意味着管理员要么知道所有用户的证书密码(并且通常不能保留水,我希望这是显而易见的原因),或者您的应用程序必须实现一些非常复杂的过程来部署对称密钥。正确地执行该程序令人难以置信复杂。如果你有一个托管密钥(一个非常特权的密钥,通常存储在硬件中,以方便对称密钥配置),它会有很大的帮助,因为系统可以使用托管密钥打开对称密钥并添加用户和'admin '证书加密到密钥。

此方案允许通过加密方式分离对数据的访问,并且如您所见 extreamly 复杂。

另一种方法是通过授权方式分离访问。这仅仅意味着对所使用的密钥的访问由GRANT / DENY / REVOKE访问控制列表控制,并且用户可以基于对密钥的访问来加密和解密数据,但是密钥被解密为每个人(例如,它们被加密数据库主密钥和服务主密钥)。但这比密码分离要弱得多。通过使用透明数据库加密和通过GDR控制数据访问,您可以获得完全相同的效果,而复杂性只是其中的一小部分。

最后有一条你不应该采取的路径:在应用程序中嵌入密码。例如。有存储过程,打开密钥,保存数据,然后关闭密钥,其中嵌入证书访问密码,然后加密过程。这将给你一个很大的安全妄想,这就是我所说的。