簡體   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