了解SQL Server加密(通过密码)?

时间:2012-11-26 10:13:02

标签: sql-server sql-server-2008 security encryption

公司需要存储敏感数据。现在请不要谈论证书。

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...) 

一切都很好。

问题:

  1. 当程序员打开对称密钥时,他必须知道密码。我不认为程序员应该知道密码。怎么解决这个问题?

  2. 如果GOD黑客获得了整个.bak文件,并且他在自己的家庭计算机上恢复了备份 - 他可以查看其中一位程序员编写的SP,并查看密码。然后 HACKER 可以:

    OPEN SYMMETRIC KEY SecureSymmetricKey1  通过密码解密= N'blabla'

  3. 我错过了什么?

    感谢您的帮助。

2 个答案:

答案 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文件并试图打开它,他就不能,因为他没有密码就无法打开数据库主密钥。没有数据库主密钥就不会打开对称密钥。因此,如果他运行存储过程,他就不会看到任何内容。

我希望有所帮助。