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