繁体   English   中英

如何对表的某些列中的数据进行加密/解密,以及在插入新记录时也应对其进行加密

[英]How to encrypt/decrypt data in some columns of a table and when a new record gets inserted it should also get encrypt

我知道这样插入新记录

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') ) );       

几个月前,我遇到过类似情况。 包含个人数据的表需要对某些列进行加密,但是该表在旧版应用程序中使用并且具有许多引用。

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

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. 更新/插入时-加密数据并插入新表中; 对原始表使用某种掩码(例如***43-****-****-****

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

执行上述步骤非常好,因为:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM