2015-11-02 152 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还没有的新功能,但很好的了解。 –