在SQL Server中分离加密和解密privillidges

问题描述:

我试图用加密在DB上保存敏感信息,并且所有用户都可以在加密后将其信息放入数据库中,但只有特权用户才能解密并查看它。我如何使用SQL Server 2008密钥/证书/加密机制实现它?在SQL Server中分离加密和解密privillidges

谢谢, Ebe。

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

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

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

要做到这一点,你做到以下几点:

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

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

这种场景允许通过加密手段分离对数据的访问,并且正如您看到的是extreamly complex。

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

最后是你不应该采取的路径:在应用程序中嵌入密码。例如。已经存储了打开密钥,保存数据,然后关闭密钥,并在其中嵌入证书访问密码的过程,然后加密该过程。这会给你带来安全感的巨大妄想,这就是我要说的。