如何最好地加密/解密SQL Server数据,以防止开发人员看到它?

时间:2010-02-28 16:33:21

标签: vb.net sql-server-2008 encryption design-patterns obfuscation

这是一个有趣的问题,我正在寻找一种能让它保持可行的模式。

我正在为学校系统构建智能客户端应用程序。它将包含有关学生的信息,包括他们的成绩单,病假等。它将生成学生级报告,包括他们的报告卡,每个报告都由老师提供非常个人的评论。该应用程序将通过Web服务从远程服务器检索数据。

所以数据非常机密。我将在数据库中加密它,并在检索时解密 - 没问题。

问题是我的团队和我应该从不看到生产明文数据。然后出现一个有趣的问题来调查生产错误!我们想要打开与用户相同的记录,看看他们看到了什么。但如果我们这样做,我们就会违反保密规定。

我的想法是这样,而且并不完美。

  • 首先,在存储到数据库之前加密数据,在UI上解密。那里什么新鲜事。
  • 其次,在UI中放置一种机制来混淆特权数据。 (即,姓名和教师叙述是特权的;年级不是。)我不会加密它,但会混淆它 - 即使是简单的键移也足够了。原因是,这些报告充满了文字。如果我加密段落并在报表中显示结果,它将是一个坚实的大写字符墙,看起来与原始文本完全不同。如果我对字母字符进行键移,它将是不可读的,但仍然看起来像段落,句子,项目符号列表等。在不添加视觉复杂功能的情况下,更容易看出出现了什么问题。
  • 第三,我输入了一个配置设置来执行此UI混淆,仅适用于SysAdmin角色,而不是教师或SchoolAdmin。在开发过程中,我将此配置设置为False,并且我们针对假明文进行开发。对于生产,我们将其设置为True,从那时起,我们只看到混淆的文本。

最后,对于我们绝对必须看到学生记录的明文的情况,我们在UI中有一个覆盖配置设置的覆盖设置,并显示明文。我们在人力层面管理这一点 - 通知学校管理部门,因为这个原因我们需要看到这个学生的记录等。签字签字,抱怨同意,律师们争先恐后地冲他们的喷气机,冲洗和重复。

思考?我觉得这个必须是好的基础。如果可能的话,请帮我改进这个计划。

4 个答案:

答案 0 :(得分:2)

在一个有类似问题的团队中,我们不得不使用大量的模拟数据。生产总是猜测工作。没有人被允许知道任何密码。

<强> 修改

如果您想要完全安全,您将允许外部公司处理数据,这使他们处于保护数据的位置,并保证如果发生错误您将不会被起诉。只是我的.02

答案 1 :(得分:1)

所以我一般都按照以下方式处理:

SQL Server具有加密功能 - 透明加密(不适合您的情况,因为您将在查询中看到解密数据)或基于密钥的加密,其中用户帐户在密钥上具有ACL。使用此方法,您可以在SQL Server本身上创建X509证书,然后生成具有适当ACL的对称密钥。在存储过程中,您可以打开对称密钥以将未加密的数据返回给您的应用程序。当然,您应该通过安全方式连接到SQL - 您可以在SQL服务器上放置X509证书以进行保护连接。

当然,现在您遇到密钥管理问题。您可以为应用程序创建一个特定的Windows帐户,使用随机强密码,一旦配置应用程序池就将其丢弃,然后将该NT帐户添加到SQL中(如果您在域环境中这很容易要做,工作组必须镜像IIS和SQL服务器上的帐户)。要进行调试,您需要另一个可以访问密钥的帐户。此帐户的密码应设置为“破碎玻璃” - 存储在可审核的某个地方,或者密码的一半在两个或更多必须同意的人之间共享,并且需要正式签收(然后在使用后更改) )

有一个SQL加密here的介绍,但它不包括ACL。 MSDN上有an entire section,其中还包含验证者,以及您可以使用的各种选项。

或者您可以选择使用加密Web服务(您调用它来加密数据),这会返回对密钥和密文的GUID引用。这样,密钥可以存储在受到良好保护的数据库中,并且可以基于每个帐户保护解密功能。再次,你必须有一个休息玻璃帐户。当客户对自己管理SQL加密没有足够的信心时,我就已经这样做了。

答案 2 :(得分:0)

实际上,您无需在UI处解密数据。 SQL Server具有为您执行实时加密的工具。如果有人需要查看明文,他们可能会被放入一个角色,给予他们许可(并在他们完成时取出)。

但是,如果看到数据中断了机密性,那么显然您永远无法看到生产数据。唯一的解决方案是使用munged数据或完全随机数据的数据副本。

答案 3 :(得分:0)

您应该拥有的一件事是不可变的审计跟踪。每当有人访问任何机密数据时,都会创建审计记录。在像SysAdmins请求访问他们通常不应该查看的报告数据的情况下,会记录异常。

客户应建立业务流程,以定期审核审核日志中的任何异常。这既可以起到滥用系统的作用,也可以在事件发生后进行调查,如果某人 发生流氓行为。