Found wrong password for user 'user'@'host'; ignoring user
啟動或 FLUSH PRIVILEGES 時,權限系統發現 mysql.user 表中密碼欄位格式非法,直接忽略該帳號。
| 原因 | 特徵 | 修復指令 |
|---|---|---|
| 舊版 user 表升級未執行 | Password 欄位長度 < 16 字元 (pre-4.1 格式) | 執行 mysql_upgrade 或執行 scripts/add_long_password |
啟動參數缺少 --old-protocol | 帳號使用 8 字元舊密碼,伺服器預期新格式 | 更新密碼為新格式,或啟動加 --old-protocol (不推薦) |
| 未使用 PASSWORD() 函數寫入 | 直接 INSERT 明文或其他雜湊 | UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='user' AND Host='host'; FLUSH PRIVILEGES; |
| 手動修改 user 表損壞格式 | Password 欄位內容非標準雜湊 | 同上,重新用 PASSWORD() 產生 |
OLD_PASSWORD() 產生。* 開頭,PASSWORD() 產生(雙倍 SHA1)。authentication_string 欄位,支援多種認證外掛(caching_sha2_password 預設)。-- 檢查異常帳號
SELECT User, Host, LENGTH(Password) AS len, Password
FROM mysql.user
WHERE LENGTH(Password) NOT IN (16, 41) OR Password NOT LIKE '*%';
-- 批次修正 (5.7 前版本)
UPDATE mysql.user SET Password=PASSWORD('new_strong_pwd')
WHERE User='app_user' AND Host='%';
FLUSH PRIVILEGES;
mysql.user 表,務必用 CREATE USER/ALTER USER/SET PASSWORD。mysql_upgrade。「忽略使用者」是權限系統的自我保護機制。根治在於規範帳號管理流程、升級必跑 mysql_upgrade、統一使用官方 SQL 語法操作權限,而非事後修補 user 表資料。