我查看了 mysql.user 表中的用户,发现有 3 个根。
root@localhost
[email protected]
[email protected]
当我第一次发现这一点时,所有 root 都没有密码保护。我设法用密码保护 root@localhost,但我不知道如何用密码保护其他两个。我该如何通过命令行做到这一点?
谢谢你的帮助。
答案1
SQL 查询:
update user set password=PASSWORD("NEWPASSWORD") where User='root' AND Host="127.0.0.1";
update user set password=PASSWORD("NEWPASSWORD") where User='root' AND Host="example.com";
答案2
我有三 (3) 项预防措施供您参考。请记住以下几点:
注意事项 1) 更新 mysql.user 后务必运行 FLUSH PRIVILEGES。否则,更改直到下次重新启动 mysql 才会生效。
预防措施 2) 如果您已打开二进制日志记录,请在会话中禁用二进制日志记录。否则,mysql 密码将在二进制日志中可见。不用担心,所有其他 DB 连接都已启用二进制日志记录。
设置 sql_log_bin=0;
更新用户设置密码=PASSWORD("NEWPASSWORD") 其中 User='root' AND Host="127.0.0.1";
更新用户设置密码=PASSWORD("NEWPASSWORD") 其中 User='root' AND Host="example.com';
刷新权限;
注意事项 3)在 Linux 版本的 mysql 中,文件 /root/.mysql_history 记录了您的会话输入。密码仍然可见。使用 vi 编辑您的更改。
为了不必担心关闭二进制日志来隐藏密码,我通常会这样做:
我的 Windows 桌面上运行着 mysql。我在 Windows 版 MySQL 中运行了以下命令:
lwdba@localhost (DB information_schema) :: 选择密码('NEWPASSWORD');
+------------------------------------------+
| 密码('NEWPASSWORD')|
+-------------------------------------------+
| *B845F78DCA29B8AE945AB9CFFAC24A9D17EB5063 |
+-------------------------------------------+
集合中的 1 行(0.00 秒)
现在,在 Linux 版 MySQL 中运行此命令:
设置 sql_log_bin=0;
更新用户设置密码='*B845F78DCA29B8AE945AB9CFFAC24A9D17EB5063' 其中用户='root' 并且主机=“127.0.0.1”;
更新用户设置密码='*B845F78DCA29B8AE945AB9CFFAC24A9D17EB5063' 其中用户='root' 并且主机=“example.com';
刷新权限;
这更有利的三个原因:
- 这更安全。Linux 中任何地方都不会出现明文密码。
- 您没有禁用二进制日志记录。
- 虽然它在二进制日志中可见,但是谁能理解 MD5 加密输出???