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

MySQL ERROR 1045 (28000) 訪問被拒絕:根因分析與三大平台解決方案

     編輯:MySQL 資料庫相關知識

「Access denied for user ... (using password: YES)」是 MySQL 運維中最高頻錯誤之一。本文從權限表結構入手,給出 Windows/Linux/通用三種場景的標準化修復流程。

核心成因

mysql.user 表中存在 User=''(匿名用戶)或 Host 匹配順序導致「錯誤賬號優先命中」。MySQL 驗證邏輯:按 Host、User 排序,第一匹配勝出;匿名用戶 User='' 排在具體用戶之前,導致合法用戶被誤判為匿名並拒絕。

方案一:清理匿名用戶(通用、推薦)

-- 登入後執行
USE mysql;
SELECT Host, User FROM user;  -- 確認是否有 User=''
DELETE FROM user WHERE User = '';
FLUSH PRIVILEGES;

或將其重命名:UPDATE user SET User='app_user' WHERE User='';

方案二:Linux 環境 --skip-grant-tables 重建 root

  1. systemctl stop mysqld
  2. mysqld_safe --skip-grant-tables --skip-networking &
  3. mysql -u root mysql(無密碼進入)
  4. 若 SELECT * FROM user; 為空,說明權限表損壞,需重建:
    INSERT INTO user(Host,User,Password,Select_priv,Insert_priv,Update_priv) VALUES('localhost','root',PASSWORD('newpwd'),'Y','Y','Y');
  5. FLUSH PRIVILEGES;,重啟服務驗證。

方案三:Windows 圖形化/重裝大法

  • 使用 MySQL Workbench / phpMyAdmin 直觀刪除匿名帳號。
  • 若虛擬主機用戶眾多:備份 data 目錄 → 重裝 MySQL → 逐個刪除重建用戶 → 覆蓋回數據目錄。

避坑指南

  • 修改權限後務必 FLUSH PRIVILEGES; 或重啟服務。
  • 生產環境禁用 skip-grant-tables 後直接暴露 3306 端口,務必加 --skip-networking。
  • MySQL 8.0+ 密碼插件改為 caching_sha2_password,舊客戶端需指定 --default-auth=mysql_native_password 或改回 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd';
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved