【发布时间】:2015-11-02 16:10:35
【问题描述】:
我有一个 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
【问题讨论】:
标签: sql-server entity-framework encryption