【问题标题】:Best practices for storing key information for encrypted and decrypted a column存储加密和解密列的密钥信息的最佳实践
【发布时间】:2015-11-02 16:10:35
【问题描述】:

我有一个 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

【问题讨论】:

    标签: sql-server entity-framework encryption


    【解决方案1】:

    在 SQL Server 2016 中,有一个名为 Always Encryption 的新功能here

    【讨论】:

      猜你喜欢
      • 2011-09-23
      • 2017-04-20
      • 2010-10-21
      • 2014-07-28
      • 2010-11-18
      • 1970-01-01
      • 2022-11-03
      • 2011-10-10
      • 2020-05-18
      相关资源
      最近更新 更多