4

我在 SLES 11 SP2 上运行 MySQLserver 版本 5.0.96,我正在寻找一种安全的方式来更改用户的密码。当然,通过以下方式更改用户密码非常容易:

SET PASSWORD FOR 'user'@'192.168.0.%' = PASSWORD('mysecret');

但是这个查询会进入查询日志、二进制日志和 MySQL 历史文件。为了防止这种情况,我使用了:

export MYSQL_HISTFILE=/dev/null

在启动客户端之前,并且:

SET sql_log_bin = 0;
SET sql_log_off = 1;

然后。grep 和 mysqlbinlog 证明我的计划是齐头并进的,但是我忽略了 MySQL 已经默默地将 /dev/null 的文件模式位更改为 0600。哎呀!

此时,我问自己是否有更好的方法来安全地更改用户密码。现在我问你:

安全更改 MySQL 服务器用户密码的最佳方法是什么?

4

2 回答 2

1

似乎根据dev.mysql,他们建议只保护日志而不是清理它们。

为了防止对日志文件的无根据暴露,它们应该位于一个目录中,该目录限制只有服务器和数据库管理员可以访问。

复制从服务器将复制主服务器的密码存储在 master.info 文件中。将此文件限制为仅供数据库管理员访问。

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

看起来这个问题在更高版本的 MySQL 中得到了更优雅的修复。请参阅:http ://dev.mysql.com/doc/refman/5.7/en/password-logging.html

在 MySQL 5.7 中,语句日志记录避免为以下语句以纯文本形式写入密码:

CREATE USER ... IDENTIFIED BY ... GRANT ... IDENTIFIED BY ... SET PASSWORD ... SLAVE START ... PASSWORD = ... CREATE SERVER ... OPTIONS(... PASSWORD ...) ALTER服务器...选项(...密码...)

对于一般查询日志、慢查询日志和二进制日志,这些语句中的密码被改写为不在语句文本中逐字出现。重写不适用于其他语句。

因此,除非您可以升级到更高版本,否则您的解决方案似乎是正确的。

于 2013-07-30T13:26:20.133 回答
0

我在 Linux 系统上使用 mysqladmin,但事先有一个额外的步骤来防止显示或记录新密码。读取命令将允许您输入一个新密码,该密码将存储在“newpass”变量中,而不会显示在屏幕上。mysqladmin 命令将提示您输入当前密码,但不会在屏幕上显示,如果当前密码正确,它会将 MySQL 用户的新密码设置为“newpass”变量的值。

echo -n "Enter new password: "; read -s newpass; echo; mysqladmin -u <yourusername> password "$newpass" -p

您可以按原样将上述内容复制并粘贴到 Linux 系统上的终端中,但请务必替换<yourusername>为您的 MySQL 用户名。

于 2017-12-26T06:10:39.787 回答