【问题标题】:Querying encrypted values in database查询数据库中的加密值
【发布时间】:2012-02-23 06:55:39
【问题描述】:

我有一个使用 SQL Server 2008 的 ASP.NET Web 应用程序。

当通过网络应用提交邮政编码时,它会被加密,然后将加密后的值发送到数据库并插入到表中。

我现在需要通过搜索以下邮政编码的部分内容,从 Web 应用程序中找到一种查询这些邮政编码的方法:

SELECT PostCode
FROM Table
WHERE PostCode LIKE @PostCode + '%'

如果不在数据库中存储解密函数,我该如何做到这一点? (我认为这对安全不利?)

【问题讨论】:

  • 你对数据库做了什么样的查询?
  • @JamieDixon - 更新了我的问题,抱歉我应该把它放在首位!

标签: asp.net sql-server security sql-server-2008 encryption


【解决方案1】:

这里真的只有两个选择。

  1. 加密您提交给选择查询的数据。这样您就可以比较两个不同的加密值。当然,如果您使用的是盐,这将失败..

  2. 不要在存储之前加密值。相反,只需正常保存即可。如果确实需要加密,请使用 SQL Server 中提供的加密方法自动加密列:http://msdn.microsoft.com/en-us/library/ms179331.aspx

加密的目的基本上是保护“静止”信息。 SQL Server 可以自行完成。

【讨论】:

  • 干杯,那么我不应该以这种方式加密值吗?
  • @Curt:如果您希望它们可搜索,则不要。一般来说,密码等字段应该使用盐进行单向散列。您需要进行大量搜索的字段应通过可逆加密或存储容器的加密机制(在本例中为 SQL 服务器)处理。
  • @Curt:如果您的情况是只有 1 个应用程序会解密该字段并且只有在它已经检索到信息之后,那么您可以依赖应用程序的加密密钥。但是,我会说这是一种脆弱的方法。由于不同服务器的暴露方式,数据库服务器中的密钥比 Web 服务器上的密钥更安全。也就是说,Web 服务器可以通过 Internet 直接访问,而您的数据库服务器不应该。
  • @ChrisLively - 干杯干杯,我认为我的做法是正确的,并且正在努力寻找解决这个问题的好方法,但似乎我做错了!所以我应该专注于数据库安全,而不是太担心里面的个别数据?我担心的是,如果开发团队被授予访问数据库的权限,他们就可以访问所有这些存储的信息。
  • @Curt:已被授予访问该加密密钥的用户帐户将有权解密数据。这与让开发人员访问该密钥所在的生产 Web 服务器没有什么不同。一般来说:开发人员永远不应该访问生产数据,尤其是在数据需要加密的情况下。相反,您应该有专门的操作人员可以访问它,并经过适当的背景检查。如果开发人员需要复制问题,那么您的运维人员可以与他们合作进行设置。
【解决方案2】:

第一道

您能否从您的 ASP.Net 应用程序中发送数据库中的加密邮政编码,并使用加密后的邮政编码查询它,如下所示......

SELECT PostCode
FROM Table
WHERE PostCode LIKE @EncryptedPostCode + '%'

第二种方式

关于查询加密列的文章。

Encrypted Columns and SQL Server Performance

【讨论】:

  • +1 好的链接/如何指导。虽然我相信第一种方法行不通。
  • 我最后在 c# ASP.net , sqlserver 中检查了。很好用。:)
  • 有趣。我希望那是不可能的。
  • 你应该在你的最后尝试一下:)
【解决方案3】:

所以,您将“Court”发送到您的数据库,它存储了“#&%^^”之类的内容,并且您想在数据库中查找字符串“Court”?

我认为唯一的方法是加密网络应用程序上的搜索字符串(因为您已经这样做了插入)并将其与数据库上的加密版本进行比较。

【讨论】:

  • 我似乎在 OP 问题中看到了部分搜索的要求
猜你喜欢
  • 2010-09-15
  • 2013-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-28
  • 2017-09-03
  • 2018-11-04
相关资源
最近更新 更多