首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

MySQL 權限表排序規則導致登入失敗的分析與解決

     編輯:MySQL 綜合教學

問題現象

mysql.user 權限表內容如下:

Host        User    Password
localhost   xxw     (空)
bogon       root    *81F5E21E...
localhost   root    *81F5E21E...
::1         root    *81F5E21E...
%           root    *81F5E21E...

從 localhost 以 root 登入,密碼正確卻提示:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

根本原因:權限表的排序與匹配規則

儲存規則

  • User 欄位非空:必須嚴格匹配
  • User 欄位為空:匹配所有使用者
  • 連線資訊未指定 user 或 -u 為空:視為不提供使用者名稱,匹配所有使用者

排序規則(讀入記憶體時)

依限制範圍大小排序,限制越詳細排越前:

  1. 先按 Host 字段排序
  2. Host 相同則按 User 字段排序

實際匹配過程分析

讀入記憶體後排序:

localhost  xxw         (空密碼)
localhost  root        *81F5E21E...
bogon      root        *81F5E21E...
::1        root        *81F5E21E...
%          root        *81F5E21E...

連線資訊 root@localhost 依序匹配,命中第 2 筆(localhost + xxw),該筆密碼為空,但輸入了最後一筆的密碼,導致驗證失敗。MySQL 錯誤訊息誤導使用者以為匹配到最後一筆。

解決方法

  • 刪除或修改 localhost/xxw 這筆空密碼記錄
  • 或確保 root@localhost 的記錄排在更前面(調整 Host/User 值)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved