Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

8.1.2.3 MySQL

密码可以以明文形式写入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安全考虑”

服务器接收到的语句可能会被重写,如果安装了查询重写插件(请参阅Query Rewrite Plugins)。在这种情况下,--log-raw选项对语句日志的影响如下:

  • 没有--log-raw,服务器将记录由查询重写插件返回的语句。这可能与接收到的原始语句不同。

  • --log-raw,服务器将记录原始接收到的语句。

密码重写的含义是,无法解析的语句(例如,由于语法错误)不会被写入一般查询日志,因为它们不能确定是否包含密码。需要对所有语句进行日志记录,包括那些带有错误的语句的用例,应该使用--log-raw选项,但请注意,这也会绕过密码重写。

只有在期望明文密码时,密码才会被重写。对于那些期望密码哈希值的语句结构,无需进行重写。如果错误地为这些语句提供了明文密码,那么密码将以给定的形式记录,不会进行重写。

为了保护日志文件不被未经授权的访问,应将它们放在服务器和数据库管理员可以访问的目录中。如果服务器将日志写入mysql数据库中的表,那么只应该授予数据库管理员对这些表的访问权限。

复制服务器在其连接元数据存储库中存储源服务器的密码,该存储库默认位于mysql数据库中的一个名为slave_master_info的表中。使用文件形式的连接元数据存储库现在已被弃用,但仍然可能(请参阅第19.2.4节,“Relay Log and Replication Metadata Repositories”)。确保连接元数据存储库只能被数据库管理员访问。使用START REPLICASTART GROUP_REPLICATION语句指定连接到源服务器的凭据是一个替代存储密码在连接元数据存储库中的方法。

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