Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Passwords and Logging

8.1.2.3 密码和日志记录

密码可以在 SQL 语句中以明文形式书写,例如 CREATE USERGRANTSET PASSWORD。如果这些语句被 MySQL 服务器以原始形式记录,那么密码将对日志访问者可见。

语句日志记录避免了在以下语句中写明文密码:

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

这些语句中的密码将被重写,不会在通用查询日志、慢查询日志和二进制日志中以明文形式出现。重写不适用于其他语句。特别是,INSERTUPDATE 语句对于 mysql.user 系统表的修改将被记录为原始形式,因此您应该避免这些语句。(直接修改授权表是不推荐的,反正。)

对于通用查询日志,密码重写可以通过启动服务器时使用 --log-raw 选项来禁止。出于安全原因,这个选项不建议用于生产环境。对于诊断目的,可能需要查看服务器收到的语句的原始文本。

默认情况下,审计日志文件的内容不加密,可能包含敏感信息,如 SQL 语句的文本。出于安全原因,审计日志文件应该写入仅供 MySQL 服务器和有合法理由查看日志的用户访问的目录。见 第 8.4.5.3 节,“MySQL Enterprise Audit 安全注意事项”

服务器收到的语句可能会被重写,如果安装了查询重写插件(见 查询重写插件)。在这种情况下,--log-raw 选项会影响语句日志记录,如下所示:

  • 不使用 --log-raw,服务器将记录查询重写插件返回的语句。这可能与原始语句不同。

  • 使用 --log-raw,服务器将记录原始语句。

密码重写的隐含结果是,无法解析的语句(例如,语法错误)不会被写入通用查询日志,因为它们不能被确定为无密码。如果需要记录所有语句,包括错误的语句,应该使用 --log-raw 选项,注意这也将绕过密码重写。

密码重写仅在明文密码被期望时发生。对于语法中期望密码哈希值的语句,不会发生重写。如果明文密码被错误地用于这种语法,密码将被记录为原始形式,未经重写。

为了保护日志文件免受未经授权的访问,请将其位于仅供服务器和数据库管理员访问的目录中。如果服务器将日志记录到 mysql 数据库中的表中,请仅授予数据库管理员访问这些表的权限。

从服务器存储来自复制源服务器的密码在其连接元数据存储库中,默认情况下是一个名为 slave_master_info 的表在 mysql 数据库中。使用数据目录中的文件作为连接元数据存储库现在已弃用,但仍然可行(见 第 19.2.4 节,“中继日志和复制元数据存储库”)。确保连接元数据存储库只能被数据库管理员访问。使用 START REPLICASTART GROUP_REPLICATION 语句指定连接源服务器的凭据是一个替代方案。

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