6.1.2.3 密码和登录

密码可以纯文本形式写入 SQL 语句(例如CREATE USERGRANTSET PASSWORD)和调用PASSWORD()函数的语句中。如果此类语句由 MySQL 服务器以书面形式记录,则其中的密码对于任何有权访问该日志的人都是可见的。

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

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

这些语句中的密码将被重写,以使其不出现在写入常规查询日志,慢速查询日志和二进制日志的语句文本中。重写不适用于其他语句。特别是,mysql.user系统 table 中引用 Literals 密码的INSERTUPDATE语句按原样记录,因此应避免使用此类语句。 (无论如何,不建议直接修改授予 table.)

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

审核日志插件生成的审核日志文件的内容未加密。出于安全原因,应将此文件写入只有 MySQL 服务器和具有合理理由查看日志的用户才能访问的目录。参见第 6.4.5.3 节“ MySQL 企业审核安全注意事项”

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

  • 如果没有--log-raw,服务器将记录查询重写插件返回的语句。这可能与收到的声明有所不同。

  • 使用--log-raw,服务器会将原始语句记录为已接收。

密码重写的含义是,无法解析的语句(例如由于语法错误)不会写入通用查询日志,因为无法知道它们没有密码。需要记录所有语句(包括出错语句)的用例应使用--log-raw选项,请记住,这也绕过了密码重写。

仅当需要纯文本密码时才进行密码重写。对于语法要求密码哈希值的语句,不会进行重写。如果错误地为这种语法提供了纯文本密码,则将按给定的密码记录密码,而不进行重写。例如,记录以下语句,因为期望密码哈希值:

CREATE USER 'user1'@'localhost' IDENTIFIED BY PASSWORD 'not-so-secret';

要防止日志文件遭受不必要的泄露,请在限制访问服务器和数据库 Management 员的目录中找到它们。如果服务器登录到mysql数据库中的 table,请仅将这些 table 的访问权限授予数据库 Management 员。

复制从属服务器将复制主服务器的密码存储在主服务器信息存储库中,该密码可以是文件或 table(请参见第 16.2.4 节“中继日志和复制应用程序元数据存储库”)。确保只能由数据库 Management 员访问存储库。将密码存储在文件中的另一种方法是使用START SLAVE语句指定用于连接到主服务器的凭据。

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