【发布时间】:2013-07-30 07:44:10
【问题描述】:
我在 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 服务器用户密码的最佳方法是什么?
【问题讨论】:
-
请注意,MySQL 的本机密码存储格式是未加盐的哈希(5.5 中的双 SHA1),它非常弱。任何有权访问 mysql 表数据文件的人都可能会暴力破解密码。因此,请避免重复使用敏感密码作为 MySQL 密码。
-
使用 export MYSQL_HISTFILE=/dev/null 作为 root 是一个非常糟糕的主意。 Mysql 重新创建文件 /dev/null。因此,文件模式位和所有权发生了变化。此外,/dev/null 不再是块设备。这可能会产生可怕的后果。例如,某些守护进程无法启动。
-
一种可能性是在 mysql 之外计算密码哈希。这样mysql甚至不知道密码。可以借助 Digest::SHA 模块在 PERL 中实现这一点,使用:'*'.uc(sha1_hex(sha1('mysecret')))。
标签: mysql security logging change-password