遺忘 MySQL root 密碼時,若已有其他管理員帳號登入權限,可通過 mysql.user 表的加密密碼值反推明文。本文演示利用 PASSWORD() 函數對比破解的實戰技巧。
mysql> SELECT user, password, host FROM mysql.user;
+------+------------------+-----------+
| user | password | host |
+------+------------------+-----------+
| root | 773359240eb9a1d9 | localhost |
| root | | fsailing1 |
| root | | 127.0.0.1 |
| root | 309e1248634a4f61 | % |
+------+------------------+-----------+
發現:
localhost 的 root 有加密密碼 773359240eb9a1d9% 主機的 root 密碼為 309e1248634a4f61MySQL 的 PASSWORD(str) 返回加密後的雜湊值,可用於離線對比:
mysql> SELECT PASSWORD('root');
+------------------+
| PASSWORD('root') |
+------------------+
| 67457e226a1a15bd |
+------------------+
mysql> SELECT PASSWORD('chen');
+------------------+
| PASSWORD('chen') |
+------------------+
| 309e1248634a4f61 | -- 完全匹配 % 主機的 root 密碼!
+------------------+
結論:% 主機的 root 密碼明文為 chen。
# 針對已知雜湊值 773359240eb9a1d9 進行字典爆破
SELECT PASSWORD('candidate1'), PASSWORD('candidate2'), ...
-- 若某候選結果與目標雜湊一致,即破解成功
⚠️ 安全警示:
PASSWORD(),改用 caching_sha2_password 插件,此法僅適用 5.6 及更早版本。mysql_secure_installation。--skip-grant-tables 啟動後重設密碼,而非暴力破解。此技巧適合「已知部分帳號密碼、需驗證其他帳號是否同密」的審計場景,而非常規運維手段。