在数据库中加密数据的方法

6
我们有一个网站,用户将在我们的数据库中保存非常个人和敏感的数据。
当然,在存储到数据库之前,我们需要对这些数据进行加密,并使用SSL。这是一个MVC应用程序,将使用表单身份验证。那么,如何确保从保存数据到在用户个人页面上显示时,这些数据始终处于加密状态,哪种方法最好呢?
我们还需要确保即使是我们的开发人员和数据库管理员也无法访问该应用程序。
如何处理这种情况最好?

你想保护数据免受谁或什么的侵害? - Lasse V. Karlsen
任何可能需要它的人。基本上,我们只需要确保用户是唯一能看到数据的人。(虽然我知道无法百分之百保证,但我们需要尽可能接近) - twal
3
在运行时,你基本上需要使用用户提供的密钥进行加密。当然,如果用户丢失了该密钥(记住,我们谈论的是用户),那么数据也就不复存在了。 - Lasse V. Karlsen
1
还要记住,这将会有很高的成本。例如,您将无法执行简单的搜索查询(而不解密涉及条件的所有列的所有行)。 - rsenna
@twal:你最终做了什么?我很好奇,因为我也处于同样的情况... - boggy
3个回答

3

1

除非您使用公钥加密并且最终用户必须控制此加密,否则无法防止DBA访问数据。如果最终用户失去了他们的密钥,他们将失去所有数据。

您可以拥有一个单独的数据库来存储密钥,您的DBA将无法访问此数据库。

您需要有两个DBA,一个用于数据,一个用于密钥。

这是假设您不信任您的DBA,但那么您就不应该雇用他们。

如果您信任您的DBA,则让他们访问两个数据库,但要求他们拥有单独的帐户,以便如果一个帐户被攻击者入侵,他们就不能访问所有内容。

通常,在设计良好的系统中,DBA /管理员具有用于个人工作的单独帐户和用于执行工作的提升帐户。

我假设程序员只能访问测试环境。如果他们可以访问生产环境,那么他们将可以访问密钥和数据。


我们相信他们,正如我们所提到的,我们只是尽可能地保障客户的隐私。我理解我所描述的情况是理想化的。当然,最终如果有人真的想要/需要获取数据,一些内部人员将会访问它。我们只是试图尽可能接近理想的情况。这些评论非常有帮助。谢谢。 - twal

0
每个加密都有一个密钥,而这个密钥是(获取/不获取)该密钥的关键 :) 最好的方法是将密钥设置在web.config上,您可以在没有任何编程背景的情况下完成此操作。

我在StackOverflow上看到了一个漂亮的AES加密算法实现。我建议你使用它。


在web.config中设置密钥将允许开发人员访问数据,除非我漏掉了什么。 - mxmissile
@mxmissile:生产环境的web.config ≠ 开发环境的web.config。此外,生产环境的数据库 ≠ 开发环境的数据库。 - rsenna
@mxmissile:让开发人员使用他们熟悉的密钥进行开发,部署后我们可以更改它。 - naveen
如果您在web.config中存储加密密钥,请对其进行加密:https://msdn.microsoft.com/zh-cn/library/bb986855.aspx - Verthosa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接