如何加密SQL Server 2008 R2中的列

时间:2012-06-20 11:52:33

标签: sql-server encryption sql-server-2008-r2

我将使用SQL Server的共享主机。我想加密主键列(自动生成的ID)和varchar列。我四处搜寻并遇到了TDE。但是,作为共享主机,我无法使用它。所以,正在寻找任何替代品。表中已存在数据,因此现在无法从应用程序进行加密。并且有许多SQL语句使用上述varchar列进行搜索。因此,性能也是一个问题。

谢谢, 开发

2 个答案:

答案 0 :(得分:1)

  

加密主键列(自动生成的ID)

如果其ID已加密,您将如何找到记录?回答'我通过加密ID搜索'会使您无法使用密钥...

现在是真正的问题。您说您将部署在共享主机上,但是您没有提到您正在进行哪种保护,即ecnryption将提供的保护。问题是密钥管理。数据将使用密钥加密,服务器将需要以某种方式解密该dtaa。无论你如何解决问题,用于解密所有其他密钥的根密钥将在共享主机上 ,因此除了在数据的道路上略有冲突之外你不会实现任何目标。要建立一个围栏,必须从共享主机的范围之外的某处检索密钥,例如。当您与用户交互时,您的应用程序将要求输入密码来解密根密钥,这一切都是不切实际的。注意 TDE不会解决任何问题,因为信任根在TDE或柱状加密中存在同样的问题。如果您需要隐私,请使用私人托管。

回答这个问题:

如果您使用列式加密,则永远不会加密主键。这样做完全是非感性的。在共享托管环境中声称任何形式的隐私都是一个梦想。你唯一可以保护的就是媒体的意外丢失(托管硬盘驱动器在跳蚤市场出现)。

答案 1 :(得分:0)

开发, 我认为在您的情况下,唯一的选择是从应用程序加密。

或者,您可以重命名表,替换VIEW而不是重命名的表。加密所有现有数据: update real_table set 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免费提供基本的加密功能。