6

有时我查看我的 MySQL 日志,偶然发现一些AES_ENCRYPT/AES_DECRYPT请求以明文形式显示密码。

如果我在 PHP 中创建日志,我将能够删除它们。

但是MySQL 通用/慢查询日志呢?他们的选项是否可用,或者是否可以设置一个不会保存在日志中的 mySQL 变量?

4

1 回答 1

3

不幸的是,我知道没有办法为单个语句禁用 MySQL 日志记录。由于这个原因,MySQL 文档建议保持日志的安全:

5.2.3 开始。一般查询日志

从 MySQL 5.6.3 开始,写入通用查询日志的语句中的密码由服务器重写,不会以纯文本形式出现。通过使用 --log-raw 选项启动服务器,可以抑制一般查询日志的密码重写。此选项可能对诊断有用,可用于查看服务器接收到的语句的确切文本,但出于安全原因,不建议将其用于生产用途。

在 MySQL 5.6.3 之前,语句中的密码不会被重写,一般查询日志应该受到保护。请参阅第 6.1.2.2 节,“<a href="http://dev.mysql.com/doc/refman/5.1/en/password-security-admin.html" rel="nofollow">密码安全管理员指南” .

不幸的是,(从 5.6.3 开始)内置的反密码日志记录仅适用于 MySQL PASSWORD() 函数。

对于您的问题,我看到了一些可能的解决方案:

  1. 对于每个查询:禁用日志、执行查询、启用日志
  2. 在您的应用程序本身中散列密码(在您的情况下,php sha)
  3. 保护日志文件,以便没有人可以看到语句
  4. 登录到删除密码本身的应用程序
于 2012-08-16T08:43:36.780 回答