公司需要存储敏感数据。现在请不要谈论证书。
DBA 执行以下操作:
CREATE SYMMETRIC KEY SecureSymmetricKey1
WITH ALGORITHM = DESX
ENCRYPTION BY PASSWORD = N'blabla';
程序员想要加密数据并执行以下操作:
-- open key
OPEN SYMMETRIC KEY SecureSymmetricKey1
DECRYPTION BY PASSWORD = N'blabla'
-- actual encrpyt
DECLARE @encrypted_str VARBINARY(MAX)
SET @encrypted_str = EncryptByKey(Key_GUID('SecureSymmetricKey1'),'my data');
另一个程序员想要读取数据,所以他这样做:
DECLARE @decrypted_str VARBINARY(MAX)
SET @decrypted_str = DecryptByKey(...encrypted_str...)
一切都很好。
问题:
当程序员打开对称密钥时,他必须知道密码。我不认为程序员应该知道密码。怎么解决这个问题?
如果GOD黑客获得了整个.bak
文件,并且他在自己的家庭计算机上恢复了备份 - 他可以查看其中一位程序员编写的SP,并查看密码。然后 HACKER 可以:
OPEN SYMMETRIC KEY SecureSymmetricKey1 通过密码解密= N'blabla'
我错过了什么?
感谢您的帮助。
答案 0 :(得分:2)
当有encryption in SQL Server本身可以打开所有内容或逐列打开时,是否有必要执行此操作的原因。
如果您想按自己的方式行事,可以在创建/更改时使用加密创建程序。这将阻止人们在恢复之前或之前从数据库中提取逻辑。
Create Procedure enc.prMyProcedure With Encryption
as...
答案 1 :(得分:1)
回答你的问题是: 1)不要使用密码作为密钥。使用数据库主密钥加密密钥。然后使用密码和服务密钥加密数据库主密钥。程序员仍需要在加密\解密时编写OPEN SYMMETRIC KEY SecureSymmetricKey1。但是你不需要告诉他数据库主密钥的密码,因为他不需要在任何地方写这个密码。 当我们不是每次创建对称密钥时,密码只写一次。此外,当使用服务密钥加密数据库主密钥时,如果您位于相同的SQL Server实例下,则不必提及打开DataBase主密钥的密码。
2)如果有人拿走你的.bak文件并试图打开它,他就不能,因为他没有密码就无法打开数据库主密钥。没有数据库主密钥就不会打开对称密钥。因此,如果他运行存储过程,他就不会看到任何内容。
我希望有所帮助。