Documentation Home
MySQL 8.0 参考手册  / 第 6 章 安全  / 6.1 一般安全问题  / 6.1.2 保证密码安全  /  6.1.2.3 密码和日志记录

6.1.2.3 密码和日志记录

密码可以明文写在 调用 函数的 SQL 语句中,例如CREATE USER, GRANT, , 和 语句。如果这样的语句被 MySQL 服务器记录下来,那么任何有权访问日志的人都可以看到其中的密码。 SET PASSWORDPASSWORD()

语句日志记录避免将密码写为以下语句的明文:

CREATE USER ... IDENTIFIED BY ...
GRANT ... IDENTIFIED BY ...
SET PASSWORD ...
SLAVE START ... PASSWORD = ...
CREATE SERVER ... OPTIONS(... PASSWORD ...)
ALTER SERVER ... OPTIONS(... PASSWORD ...)

这些语句中的密码被重写为不会出现在写入一般查询日志、慢速查询日志和二进制日志的语句文本中。重写不适用于其他语句。特别是, 引用文字密码的系统表的INSERTor UPDATE语句按 mysql.user原样记录,因此您应该避免此类语句。(无论如何,不​​鼓励直接修改授权表。)

对于一般的查询日志,可以通过 --log-raw选项启动服务器来抑制密码重写。出于安全原因,不建议将此选项用于生产。出于诊断目的,查看服务器接收到的语句的确切文本可能很有用。

审计日志插件生成的审计日志文件的内容未加密。出于安全原因,此文件应写入一个目录,该目录只能由 MySQL 服务器和有正当理由查看日志的用户访问。请参阅 第 6.4.4.2 节,“MySQL 企业审计安全注意事项”

为防止日志文件被无端暴露,请将它们放置在限制服务器和数据库管理员访问的目录中。如果服务器登录到 mysql数据库中的表,则只向数据库管理员授予对这些表的访问权限。

副本将复制源的密码存储在源信息存储库中,源信息存储库可以是文件或表(请参阅第 17.2.2 节,“中继日志和复制元数据存储库”)。确保只有数据库管理员才能访问存储库。将密码存储在文件中的另一种方法是使用该 START SLAVE语句指定用于连接到源的凭据。

使用受限访问模式来保护包含日志表或包含密码的日志文件的数据库备份。