首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL「忽略使用者」錯誤解析:非法密碼格式、版本不匹配與 PASSWORD() 函數正確用法

     編輯:MySQL 資料庫相關知識

錯誤訊息

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() 產生

密碼格式演進

  • Pre-4.1:16 字元十六進位 (8 位元組),OLD_PASSWORD() 產生。
  • 4.1 - 5.6:41 字元,以 * 開頭,PASSWORD() 產生(雙倍 SHA1)。
  • 5.7+: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 大版本後必須執行 mysql_upgrade。
  • 定期審計帳號密碼強度與格式。

結語

「忽略使用者」是權限系統的自我保護機制。根治在於規範帳號管理流程、升級必跑 mysql_upgrade、統一使用官方 SQL 語法操作權限,而非事後修補 user 表資料。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved