2011-08-31 190 views
2

我希望能够加密保存在MySQL数据库中的所有数据。我还需要能够使用私钥解密数据。加密和解密数据库中的所有数据

该数据库可以被多个人访问。

我想知道我需要使用哪些PHP功能来完成此操作。

谢谢

+0

它是否必须在PHP?你也可以使用mysql。查看[本页](http://dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_aes-decrypt) –

+2

使用MySQL加密函数对MySQL中的数据进行加密是一种危险的缺陷方法,因为数据库连接默认情况下不是**加密的,并且SQL语句(包括加密密钥!)可以保存在各种MySQL日志文件中。 – duskwuff

+6

你想保护什么?您可能会更好地对MySQL使用的文件系统进行加密,然后为您创建的任何用户强制使用SSL,以确保传输的任何数据都已加密。然后,您不必担心编写自己的加密和可能的代码泄漏。 –

回答

11

加密整个数据库是一个很大的麻烦,除非该数据库提供了“透明加密”,Oracle数据库提供了这样的事情。使用透明加密的轻量级开源解决方案是SQLite。使用此功能,加密不直接应用于数据,但存储本身已加密。这意味着您可以像平常一样处理数据库,并增加物理存储的加密优势。但不幸的是,MySQL不提供这样的事情。

首先,为什么加密你的数据库不是一个好主意。加密数据看起来像随机垃圾到您的数据库。这意味着很多负面的东西,如

  • 的SELECT不再对您的数据,因此它们以前那样,途中如果在所有(需要大量的努力)
  • 索引变得几乎无用
  • 数据库日志形同虚设
  • ...

如果您加密使用MySQL的内置encryption support那么这意味着数据本身以纯文本格式的数据库发送 - 除非你使用TLS-SECUR这意味着窃听者根本不关心你的加密。

所以如果你需要加密数据,你应该保持在最低限度,只加密数据中真正敏感的部分,以便仍然能够执行高效的查询。如果应用程序和数据库之间不存在安全的TLS连接,则还应该直接在应用程序中加密数据。