2
我有一個Web服務將使用SQL Server數據庫來存儲必須加密和解密的內容。它會定期查詢表格並獲取數據的解密形式以用於處理。用於存儲加密和解密列的密鑰信息的最佳做法
我跟着this example here建立一個證書和對稱密鑰,以適用於該列,它的工作原理。
我不確定什麼是在表上執行CRUD操作時使用密鑰名稱的最佳做法。我使用的是實體框架,它並不天真地支持加密和解密。
所以,可能我已經想到了:
- 創建包裹CRUD操作的存儲過程。將密鑰和證書的名稱存儲在存儲過程本身中。當然,這使得有人可以很容易地調用這個存儲過程來獲取解密的數據,但我相信如果數據庫移動到另一臺機器上,那麼該方法將無法工作,除非您能夠爲數據庫創建根證書。 例如
- 與#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
OK,沒有使用SQL 2016還沒有的新功能,但很好的瞭解。 –