【问题标题】:How to encrypt columns in SQL Server 2008 R2如何加密 SQL Server 2008 R2 中的列
【发布时间】:2012-06-22 13:16:57
【问题描述】:
我将为我的 SQL Server 使用共享主机。我想加密主键列(自动生成的 ID)和 varchar 列。我四处搜寻,发现了 TDE。但是,作为共享主机,我无法使用它。因此,正在寻找任何替代方案。数据已经存在于表中,因此现在无法从应用程序加密。并且有许多使用上述 varchar 列进行搜索的 SQL 语句。因此,性能也是一个问题。
谢谢,
开发
【问题讨论】:
标签:
sql-server
encryption
sql-server-2008-r2
【解决方案1】:
加密主键列(自动生成的ID)
如果记录的 ID 已加密,您将如何找到记录?回答“我通过加密 ID 搜索”会取消您不加盐密钥的资格...
现在是真正的问题。您说您将在共享主机上进行部署,但您没有提及您期望加密将提供什么样的保护。问题是密钥管理。数据将使用密钥加密,服务器将需要以某种方式解密该 dtaa。无论您如何解决问题,用于解密所有其他密钥的根密钥也在共享主机上,因此您只会在获取数据的过程中遇到一点小问题.要设置围栏,必须从共享主机范围之外的某个地方检索密钥,例如。您的应用程序在与用户交互时会要求输入密码以解密根密钥,这在所有实际情况下都是不可能的。注意
TDE 不会解决任何问题,因为信任根在 TDE 或列加密中也存在同样的问题。如果您需要隐私,请使用私人托管。
然后回答这个问题:
如果你使用列加密,你永远不会加密主键。这样做完全没有意义。在共享托管环境中要求任何形式的隐私都是白日梦。充其量只能防止意外的媒体丢失(主机硬盘出现在跳蚤市场)。
【解决方案2】:
开发,
我认为在您的情况下,唯一的选择是从应用程序加密。
或者,您可以重命名您的表,用 VIEW 代替重命名的表。加密所有现有数据:
更新 real_table 集 field1 = call_encrypt_function(field1), field2 = call_encrypt_function(field2)
在该视图中,您可以从 real_table 中选择 call_decrypt_function(field1)、call_decrypt_function(field2)。对于插入和更新,您需要掌握 INSTEAD OF INSERT 和 INSTEAD OF UPDATE 触发器。当然,您需要对这些对象使用 WITH ENCRYPTION。我在 XP_CRYPT 中看到了这种方法,但是我更喜欢免费的解决方案。 SQL Server 免费提供基本的加密功能。