2011-04-09 79 views
3

我已经搜查了几次,但没有提出什么比这个问题上不清楚的答案。如何保护MySQL中的敏感数据?

我正在开发一个存储敏感信息(中等大小的文本)的Web应用程序,并且该网站本身托管在安全的Web托管服务提供商处。但即时通讯想知道,什么是最好的方式来存储这些敏感的文本在MySQL中,而不必担心不必要的访问数据库(如从phpMyAdmin),并仍然能够代表用户自己执行这些信息的行为(如生成图表并创建PDF文件)。

非常感谢我的英语。

+2

你的英语非常好。 – dugas 2011-04-09 20:50:44

+2

同意@thedugas - 我的母语人士的英语水平差远了。 – ceejayoz 2011-04-09 20:53:00

+0

@thehudgas @ceejayoz谢谢。我很感激。 :) – Sallar 2011-04-09 21:39:03

回答

5

如果你不控制你的服务器,你根本没有安全。

  1. 控制您的服务器。
  2. 使用mysql安全模型来限制谁可以使用phpmyadmin或whatnot查看数据。

如果这还不够好,你可以考虑加密。但是,您必须将密钥存储在某个位置,现在您又回到了开始使用mysql密码的位置。

+0

你建议什么样的加密? – Sallar 2011-04-09 21:49:28

3

一种选择是使用MySQL内置的加密技术,请参阅Encryption and Compression Functions。另一个主要选择是使用二进制字段并在您的应用程序中执行加密,例如使用AES。

如果您将密钥存储在服务器上,则任何有权访问服务器和数据库的人都可以解密数据。如果这也是一个问题,那么您需要考虑如何从用户那里获得密钥。这可能很难以安全和方便的方式进行。

+0

请注意,这会使索引在加密列上无用。折衷的东西。 – ceejayoz 2011-04-09 20:52:44

+0

如果我想要搜索我的数据,该怎么办? – Sallar 2011-04-09 21:42:35

+1

我建议使用[Lucene](http://lucene.apache.org/java/docs/)或[Solr](http://lucene.apache.org/solr/)进行全文搜索,甚至是如果你不加密数据。那里的麻烦是,如果该索引没有加密,那么数据可以从中重建。这听起来像你可能想要完全控制你的服务器,如bmargulies所示。您可能需要考虑像[linode](http://www.linode.com/?r=8e44b5c078453aa590239fbe056dfe028c5b4395)或[slicehost](http://www.slicehost.com/)这样的VPS。 – WhiteFang34 2011-04-09 21:52:45

1

您可以使用mysql编码/解码加密数据库字段

1

您应该锁定您的MySQL用户帐户。考虑限制你的web应用程序本身的功能。只给它在数据库上的最小必要权限,并考虑创建存储过程以进一步确保它只能访问它所需的内容,而不是其他任何东西。

如果您不信任您的托管服务提供商,那么您至少需要将数据库移到您可以信任的某个位置。这进一步意味着你需要确保你的数据库连接是安全的(SSL)。

你应该加密你的数据。不要像@ WhiteFang34所说的那样试图自己加密,使用内置的加密技术。

+0

我很担心黑客大多不是普通用户。 – Sallar 2011-04-09 21:45:08

2

有一个由MIT设计的名为Cryptdb的系统。 Cryptdb可以根据数据所有者的密码加密数据,即使管理员也无法访问真实的数据。 该团队表示,phpBB的开销为14%!

+0

Grubbs(2017):为什么您的加密数据库不安全:https://eprint.iacr.org/2017/468.pdf – asmaier 2017-05-31 15:04:17