首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SQL server2008中加密字符串数据,同时保持对其进行查询的能力?

如何在SQL server2008中加密字符串数据,同时保持对其进行查询的能力?
EN

Stack Overflow用户
提问于 2010-01-20 21:08:04
回答 4查看 12.2K关注 0票数 5

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

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

我意识到,在将数据插入到表中之前,可以使用SQL加密库对数据进行加密,但这样就失去了使用.net查询数据的能力。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-01-21 01:32:12

我喜欢使用SQL Server的密钥管理:http://technet.microsoft.com/en-us/library/bb895340.aspx。在你有一个密钥设置之后,它就非常容易使用了:

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

代码语言:javascript
复制
insert into PatientTable values ('Pamela','Doc1',
encryptByKey(Key_GUID('secret'),'111-11-1111'),
encryptByKey(Key_GUID('secret'),'Migraine'))

要重新选择记录,非常简单:

代码语言:javascript
复制
select Id, name, Docname
from PatientTable where SSN=encryptByKey(Key_GUID('secret'),SSN)

密文总是相同的,所以比较密文比逐个解密要高效得多。

票数 2
EN

Stack Overflow用户

发布于 2010-01-20 21:17:31

如果您使用相同的加密密钥,则可以对搜索查询字符串进行加密并与之匹配。假设我的密码是runrun,我将其加密到ZAXCXCATXCATXCA,然后当我想搜索一个密码为runrun的用户时,首先加密它,它将与表条目匹配。

票数 1
EN

Stack Overflow用户

发布于 2010-01-21 02:07:45

AFAIK,大多数RDBMS不支持这一点,我通常看到的是:

A) DB查询API在将数据发送到远程数据库之前使用只有本地服务器知道的密钥对数据进行加密,并在接收到数据时对其进行解密。

B)远程数据库使用它知道的密钥存储加密的所有内容(可能在运行时,由管理员实际给出,或者在查询时提供密钥)。

A将允许您在不让所有者知道存储了什么的情况下使用数据库,但是除了等式之外,您将无法对实际的加密数据进行查询。B仅防止物理服务器被盗(服务器必须关闭,否则他们可以从内存中获取密钥...)。

我假设您想要的是Private Information Retrieval。这是一个相当年轻的领域,我认为你目前不会找到一个像样的实现。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2101498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档