2015-11-02 150 views
2

我有一個Web服務將使用SQL Server數據庫來存儲必須加密和解密的內容。它會定期查詢表格並獲取數據的解密形式以用於處理。用於存儲加密和解密列的密鑰信息的最佳做法

我跟着this example here建立一個證書和對稱密鑰,以適用於該列,它的工作原理。

我不確定什麼是在表上執行CRUD操作時使用密鑰名稱的最佳做法。我使用的是實體框架,它並不天真地支持加密和解密。

所以,可能我已經想到了:

  1. 創建包裹CRUD操作的存儲過程。將密鑰和證書的名稱存儲在存儲過程本身中。當然,這使得有人可以很容易地調用這個存儲過程來獲取解密的數據,但我相信如果數據庫移動到另一臺機器上,那麼該方法將無法工作,除非您能夠爲數據庫創建根證書。 例如
  2. 與#1類似,但包含用於密鑰和證書名稱的存儲過程的參數。將密鑰和證書名稱存儲爲我的Web服務中的硬編碼字符串。這並不是那麼好,因爲程序變得與證書/密鑰的名稱非常相關,但我想它已經與表格的定義結合了。

這兩個選項都有效,但從最佳實踐和安全角度來看,這裏可能會有更好的路線。有什麼更好的選擇?

例如對於項目1:

CREATE PROCEDURE GetDecryptedCustomers 
AS 
BEGIN 
    -- SET NOCOUNT ON added to prevent extra result sets from 
    -- interfering with SELECT statements. 
    SET NOCOUNT ON; 

    -- reading the data 
OPEN SYMMETRIC KEY SymmetricKey1 
DECRYPTION BY CERTIFICATE Certificate1; 

-- Now list the original ID, the encrypted ID 
SELECT Customer_id, CONVERT(varchar, DecryptByKey(Credit_card_number_encrypt)) AS 'Decrypted Credit Card Number' 
FROM Customer_data; 

-- Close the symmetric key 
    CLOSE SYMMETRIC KEY SymmetricKey1; 
    END 
    GO 

回答

0

在SQL服務器2016年,有一個叫始終加密here

+0

OK,沒有使用SQL 2016還沒有的新功能,但很好的瞭解。 –