密码可以在SQL语句中以纯文本形式编写,例如创建用户
,格兰特
而且设置密码
.如果MySQL服务器按照编写的方式记录这些语句,那么其中的密码对于任何访问日志的人来说都是可见的。
语句日志可以避免将以下语句的密码以明文形式写入:
创建用户…由…Alter user…由…设置密码…启动奴隶…密码=…开始复制…密码=…创建服务器… OPTIONS(... PASSWORD ...) ALTER SERVER ... OPTIONS(... PASSWORD ...)
这些语句中的密码将被重写,以避免在写入常规查询日志、慢速查询日志和二进制日志的语句文本中逐字显示。重写不适用于其他语句。特别是,插入
或更新
的语句mysql.user
引用文字密码的系统表按原样记录,因此应该避免这样的语句。(无论如何,不鼓励直接修改拨款表。)
方法启动服务器,可以抑制常规查询日志的密码重写——log-raw
选择。出于安全原因,不建议在生产环境中使用此选项。出于诊断目的,查看服务器接收到的语句的确切文本可能很有用。
缺省情况下,审计日志插件生成的审计日志文件内容不加密,可能包含敏感信息,如SQL语句的文本。出于安全原因,审计日志文件应该被写入一个只有MySQL服务器和有合法理由查看日志的用户才能访问的目录。看到章节6.4.5.3,“MySQL企业审计安全注意事项”.
如果安装了查询重写插件,服务器接收到的语句可能会被重写查询重写插件).在这种情况下,——log-raw
选项对语句日志记录的影响如下:
密码重写的一个含义是,无法解析的语句(例如,由于语法错误)不会被写入常规查询日志,因为无法知道它们是无密码的。需要记录所有语句(包括有错误的语句)的用例应该使用——log-raw
选项,请记住,这也绕过了密码重写。
只有在需要使用纯文本密码时,才会进行密码重写。对于语法要求密码哈希值的语句,不会发生重写。如果为这种语法错误地提供了纯文本密码,则按照给定的密码记录,而不重写。
要防止日志文件被无故暴露,请将它们定位到限制对服务器和数据库管理员的访问的目录中。中的表进行日志记录mysql
数据库时,仅向数据库管理员授予对这些表的访问权。
副本在其连接元数据存储库中存储复制源服务器的密码,默认情况下,该连接元数据存储库是mysql
数据库命名slave_master_info
.使用数据目录中的文件作为连接元数据存储库现在已弃用,但仍有可能(请参阅17.2.4节,“中继日志和复制元数据存储库”).确保只有数据库管理员才能访问连接元数据存储库。在连接元数据存储库中存储密码的替代方法是使用开始复制
(或者在MySQL 8.0.22之前,开始的奴隶
)或开始GROUP_REPLICATION
语句指定连接到源的凭据。
使用受限访问模式保护数据库备份,其中包括包含密码的日志表或日志文件。