2

我知道这样插入新记录

INSERT INTO dbo.Customer_data (Customer_id, Customer_Name, Credit_card_number)
VALUES (25665, 'mssqltips4', EncryptByKey( Key_GUID('SymmetricKey1'), CONVERT(varchar,'4545-58478-1245') ) ); 

但我想插入一条带有正常插入语句的新记录,该语句应该被加密。前任:

INSERT INTO dbo.Customer_data (Customer_id, Customer_Name, Credit_card_number)
VALUES (25665, 'mssqltips4','4545-58478-1245') ) );       
4

1 回答 1

1

几个月前我也有类似的情况。包含个人数据的表需要对某些列进行加密,但该表用于遗留应用程序并且有很多引用。

所以,我可以创建一个单独的表来保存加密数据:

CREATE TABLE [dbo].[Customer_data_encrypted]
(
    [customer_id] PRIMARY KEY -- you can create foreign key to the original one, too
   ,[name] VARBANRY(..)
   ,[cretit_card_numbe] VARBINARY(..)
);

然后在原表上创建一个INSTEAD OF INSERT UPDATE DELETE 触发器。触发器中的逻辑很简单:

  1. 删除时,从两个表中删除
  2. 更新/插入 - 加密数据并插入新表;对原始表格使用某种掩码(例如***or 43-****-****-****

然后,执行初始迁移以将数据从原始表移动到新表,然后对其进行屏蔽。

执行上述步骤很好,因为:

  1. 对原始表的每次插入/更新都继续有效
  2. 您可以创建触发器以EXECUTE AS OWNER访问对称密钥并直接在 T-SQL 语句中执行更改,而无需打开证书或由无权访问它们的用户
  3. 在所有读取引用中,您将获得掩码数据,因此您不必担心严重破坏应用程序
  4. 拥有触发器使您能够轻松创建和更改信息

这取决于您的环境和业务需求,因为对于其中一张表,我已将加密值存储为新列,而不是单独的表。所以,选择更适合你的。

于 2018-12-18T10:56:32.980 回答