我在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服务器用户密码的最佳方法是什么?
答案 0 :(得分:1)
根据dev.mysql,他们似乎建议只保护日志而不是清理日志。
为防止无理接触日志文件,他们应该这样做 位于限制只访问服务器的目录中 数据库管理员。
复制从属存储复制主机的密码 master.info文件。将此文件重新限制为只能访问 数据库管理员。
包含包含密码的表或日志文件的数据库备份 应使用受限制的访问模式进行保护。
在MySQL的更高版本中,这个问题似乎更加优雅。请参阅:http://dev.mysql.com/doc/refman/5.7/en/password-logging.html
在MySQL 5.7中,语句记录避免以纯文本形式编写密码 以下陈述:
创建用户...通过......授予...通过...识别... PASSWORD ...... SLAVE START ... PASSWORD = ...创建服务器...... 选项(...密码......)ALTER SERVER ...选项(...密码......)
这些陈述中的密码被重写,不会出现在字面上 语句文本,用于常规查询日志,慢查询日志和二进制文件 登录。重写不适用于其他陈述。
因此,除非您可以升级到更高版本,否则您的解决方案似乎可能是正确的。
答案 1 :(得分:0)
我在Linux系统上使用mysqladmin,但事先还有一个步骤,以防止显示或记录新密码。 read命令允许您输入一个新密码,该密码将存储在' newpass'变量没有显示在屏幕上。 mysqladmin命令会提示您输入当前密码而不显示在屏幕上,如果当前密码正确,它会将MySQL用户的新密码设置为' newpass&#39的值;变量。
echo -n "Enter new password: "; read -s newpass; echo; mysqladmin -u <yourusername> password "$newpass" -p
您可以将上述内容复制并粘贴到Linux系统上的终端中,但请务必将<yourusername>
替换为您的MySQL用户名。