我将如何加密 SQL Server 2008 中的字符串数据,同时保持对其进行查询的能力?

Sci*_*-fi 5 sql-server security encryption cryptography

我有一个将由第三方托管的数据库。我需要加密某些列中的字符串,但我不想失去对加密列进行查询的能力。

我对 SQL 实例的控制有限(我可以控制我拥有的数据库,但不能控制任何管理功能。)

我意识到我可以使用 .net 加密库在数据插入表之前对其进行加密,但是我会失去使用 sql 查询数据的能力。

roo*_*ook 2

我喜欢使用 SQL Server 的密钥管理:http://technet.microsoft.com/en-us/library/bb895340.aspx。设置好密钥后,使用起来就非常容易了:

要插入记录,请执行以下操作:

insert into PatientTable values ('Pamela','Doc1',
encryptByKey(Key_GUID('secret'),'111-11-1111'),
encryptByKey(Key_GUID('secret'),'Migraine'))
Run Code Online (Sandbox Code Playgroud)

选择返回的记录非常简单:

select Id, name, Docname
from PatientTable where SSN=encryptByKey(Key_GUID('secret'),SSN)
Run Code Online (Sandbox Code Playgroud)

密文始终是相同的,因此比较密文比遍历并解密每个密文要高效得多。