限制帐户访问SQL Server 2008 R2中的SYMMETRIC KEY和密钥轮换

时间:2012-11-20 05:49:18

标签: sql-server sql-server-2008

我有一个三部分问题,解决了SQL Server 2008 R2中的SYMMETRIC KEY。

  1. 如何使用SYMMETRIC KEY限制一个帐户才能访问ENCRYPT / DECRYPT?
  2. 当数据传递给SQL Server时,它会以“in-the-clear”传递,并且可以由存储过程和即席查询传递。我可以使用触发器来更新需要加密的列,因为它是使用上面的帐户和SYMMETRIC KEY插入的吗?
  3. 在一年的时间里,按照我公司的政策,钥匙必须轮换和更换。有没有办法轻松地旋转密钥,还是需要(用旧密钥解密,用新密钥加密)脚本?
  4. 仅供参考,我们使用的是SQL Server 2008 R2 Standard并且没有TDE的优势。 :(

    感谢您的回复! :)

1 个答案:

答案 0 :(得分:1)

加密通常通过控制加密层次结构来控制,而不是(仅)通过访问控制来控制。换句话说,用户可以通过知道解密/加密密钥(保护密钥的密码,具体而言)来加密和解密数据。所有好的加密方案都使用key hierarchy

是典型的简单层次结构
  • 数据使用对称密钥加密
  • 对称密钥使用证书加密
  • 与证书关联的私钥使用密码加密
  • 授权用户提供私钥解密密码以访问数据

您还可以对使用的证书添加显式授予/拒绝/撤销权限,请参阅GRANT Certificates Permissions,但这不能替代知道证书加密密码密码。现在回到你的问题:

  

如何使用SYMMETRIC KEY限制一个帐户才能访问ENCRYPT / DECRYPT的功能

该功能应该应用于加密对称密钥的证书,而不是对称密钥本身。通过此级别的间接,您可以为每个访问数据的用户创建证书,并让每个用户只知道自己的访问密码。撤销访问权限就像删除该特定用户的证书一样简单,不会影响任何其他用户的访问权限。添加新用户意味着添加新证书并将此新证书的加密添加到加密数据的对称密钥,从而实际上授予对数据的访问权限。由于社交原因,共享访问密码的用户的替代方案在实践中永远不会起作用。

  

我是否可以使用触发器来更新需要加密的列,因为它是使用上面的帐户和SYMMETRIC KEY插入的

理想情况下,应用程序层应调用存储过程来操作在插入之前显式加密数据的数据。您可以使用INSTEAD OF triggers来推送一个穷人“透明”的解决方案。计算列可以公开解密数据,它将向所有未正确打开解密证书的用户(会话)显示NULL。

  

键必须旋转并更改

您可以轮换加密对称密钥的证书,而不是对称密钥本身。对称密钥也应该定期更改但不要进行转换,只需添加一个新的对称密钥并开始使用它来获取新数据和更新旧数据,以便限制暴力范围并减少生日攻击概率。理由是重新加密静态数据通常非常昂贵。大多数加密方案在加密层次结构中旋转一个更高的密钥(即上面提到的证书)而不是用于加密数据的实际对称密钥。