【问题标题】:Encrypt and decrypt all data in database加密和解密数据库中的所有数据
【发布时间】:2011-08-31 02:06:29
【问题描述】:

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

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

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

谢谢

【问题讨论】:

  • 必须在php中吗?你也可以使用mysql。查看this page
  • 使用 MySQL 加密函数加密 MySQL 中的数据是一种危险的有缺陷的方法,因为默认情况下数据库连接加密,并且 SQL 语句(包括加密密钥!)可以保存在各种 MySQL 日志文件中。
  • 你想保护什么?您最好对 MySQL 使用的文件系统进行加密,然后为您创建的任何用户强制使用 SSL,以确保传输的任何数据都是加密的。这样您就不必担心在代码中的任何地方编写自己的加密和可能的泄漏。

标签: php mysql database security


【解决方案1】:

除非数据库提供“透明加密”,否则加密整个数据库会很麻烦,Oracle 数据库提供了这样的功能。使用透明加密的轻量级开源解决方案是SQLite。使用此功能,加密不会直接应用于数据,而是对存储本身进行加密。这意味着您可以像往常一样在数据库上工作,并获得物理存储加密的额外好处。但不幸的是,MySQL 不提供这样的东西。

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

  • SELECT 不再像以前那样处理您的数据(如果有的话)(需要付出很多努力)
  • 索引变得毫无用处
  • 数据库日志变得无用
  • ...

如果您使用 MySQL 的内置 encryption support 加密,则这意味着数据本身以纯文本形式发送到数据库 - 除非您使用 TLS 安全连接,否则这意味着窃听者不会关心您的加密一点也不。

因此,如果您需要加密数据,则应将其保持在最低限度,并且只加密数据中真正敏感的部分,以便仍然能够对其执行有效的查询。如果应用程序和数据库之间不可能建立安全的 TLS 连接,您还应该直接在应用程序中加密数据。

【讨论】:

    【解决方案2】:

    如果您需要在数据库中加密一组客户的信用卡号(或社会保险号、税号或其他需要保密的字段),请按照以下方法不加密,然后通过一些更好的方法:

    http://www.di-mgt.com.au/cryptoCreditcard.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-11-06
      • 2013-04-10
      • 1970-01-01
      • 2020-05-01
      • 2016-04-25
      相关资源
      最近更新 更多