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

MySQL 登入報錯 ERROR 1045 (28000) 解決方案:清理匿名用戶

     編輯:MySQL 資料庫相關知識

MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 常因 mysql.user 表存在匿名用戶(User='')導致權限匹配優先級異常。本文提供標準排查與修復流程。

問題現象

  • root 設有密碼,但 mysql -u root -p 偶發失敗,報 1045 錯誤。
  • 重試幾次可能成功,行為不穩定。

根因分析

MySQL 權限匹配順序:具體 Host > 通配 Host > 匿名用戶。
若 user 表存在 User='', Host='localhost' 匿名用戶,連線時可能優先匹配匿名用戶(無密碼),導致攜帶密碼的 root 連線被拒。

標準修復流程

  1. 停止服務:
    service mysql stop
  2. 跳過授權表啟動:
    mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
  3. 免密登入清理:
    mysql -u root mysql
    mysql> USE mysql;
    mysql> SELECT User, Host, Password FROM user;
    # 發現 User='' 匿名用戶
    mysql> DELETE FROM user WHERE User='';
    mysql> QUIT;
  4. 正常啟動驗證:
    service mysql start
    mysql -u root -p
    # 登入成功

查詢結果範例

+------+-----------------------+----------+
| User | Host                  | Password |
+------+-----------------------+----------+
| root | %                     | *hash    |
| root | localhost.localdomain | *hash    |
| root | 127.0.0.1             | *hash    |
|      | localhost             |          |  ← 匿名用戶
|      | localhost.localdomain |          |  ← 匿名用戶
+------+-----------------------+----------+

預防最佳實務

  • 安裝後立即執行 mysql_secure_installation:移除匿名用戶、禁止 root 遠程登入、移除 test 資料庫、重新載入權限。
  • 定期審計 mysql.user 表:SELECT User, Host FROM mysql.user WHERE User='' OR Password='';
  • 生產環境嚴禁保留匿名用戶與空密碼帳號。

其他可能導致 1045 的原因

原因排查/解決
密碼輸入錯誤確認大小寫、特殊字元、鍵盤布局
Host 欄位不匹配檢查 User, Host 組合,需含 localhost/127.0.0.1/%
密碼插件不匹配5.7+ caching_sha2_password vs 客戶端支援度,可改 mysql_native_password
skip-grant-tables 未關閉正常模式需重啟服務載入授權表

ERROR 1045 看似密碼錯誤,實則常為權限匹配邏輯與匿名用戶干擾所致。掌握「--skip-grant-tables 免密進入 → 清理匿名用戶 → 正常啟動」標準修復流程,並配合 mysql_secure_installation 例行加固,能從根源杜絕此類登入異常。

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