4

一家公司需要存储敏感数据。请让我们现在不要谈论证书。

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,并查看密码。然后黑客可以做:

    打开对称密钥 SecureSymmetricKey1 密码解密 = N'blabla'

我错过了什么?

感谢您的帮助。

4

2 回答 2

2

当SQL Server本身存在加密时,您是否有理由需要这样做 ,您可以打开所有内容或逐列打开。

如果您想走自己的路,您可以在创建/更改时创建带有加密的过程。这将阻止人们在还原时或还原之前从数据库中提取逻辑。

Create Procedure enc.prMyProcedure With Encryption
as...
于 2012-11-26T10:54:29.430 回答
1

对您的问题的回答是: 1) 不要为您的密钥使用密码。改为使用数据库主密钥加密您的密钥。然后使用密码和服务密钥加密您的数据库主密钥。程序员在加密\解密时仍然需要编写 OPEN SYMMETRIC KEY SecureSymmetricKey1。但是你不需要告诉他数据库主密钥的密码,因为他不需要在任何地方写这个密码。当我们创建对称密钥时,密码只写一次,而不是每次都写。此外,当数据库主密钥使用服务密钥加密时,如果您在同一个 SQL Server 实例下,则不必提及打开数据库主密钥的密码。

2)如果有人拿走了你的 .bak 文件并试图打开它,他就不能打开它,因为没有密码他无法打开数据库主密钥。没有数据库主密钥,对称密钥将无法打开。因此,如果他运行存储过程,他将什么也看不到。

我希望这有帮助。

于 2014-03-14T21:45:30.647 回答