加密SQL Server 2008 r2中现有表的列

时间:2017-03-23 09:07:26

标签: sql sql-server-2008 encryption

我需要加密现有表的列。我尝试使用加密值进行更新,但列变为空白。有没有办法让我可以在列中看到二进制值而不是空白。

我不想将数据转储到临时表,对其进行加密并转储回原始数据库,因为我在数据库中没有更多空间,因为它是历史数据库。

这是我的加密和解密代码。

  OPEN SYMMETRIC KEY PCI_Key DECRYPTION
   BY CERTIFICATE Cert
   GO
       UPDATE dbo.Table1
        SET column1=ENCRYPTBYKEY(KEY_GUID('PCI_Key'), column1)
       CLOSE  SYMMETRIC KEY PCI_Key

   OPEN SYMMETRIC KEY PCI_Key DECRYPTION
   BY CERTIFICATE Cert
   GO
      SELECT 
       CONVERT(VARCHAR,DEcryptByKey(Column1)) as column1 from dbo.table1
    CLOSE SYMMETRIC KEY PCI_Key

1 个答案:

答案 0 :(得分:2)

对于加密,您必须具有可以使用SQL SERVER加密功能的列的VARBINARY数据类型。

如果您可以更改的其他表可以直接更改列的数据类型并插入\更新数据,则可以按照这些步骤执行以下步骤。

对于现有数据,请遵循以下步骤(如果表中的数据不是很大,则其他方法会有所不同)

  1. 使用带有VARBINARY数据类型
  2. 的_1列名称在表中创建新列
  3. 使用令人兴奋的值加密来更新_1新列的值。
  4. 完成并验证然后删除旧列并使用现有列名重命名新列。
  5. 干杯!