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

MySQL 遠程連接正常但本地連接報 1045:Python MySQLdb 連接本地主機名權限修復

     編輯:MySQL 綜合教學

MySQL 遠程連接正常但本地連接報 1045:Python MySQLdb 連接本地主機名權限修復

現象:遠程客戶端連接 MySQL 正常,同機器 Python 腳本用 MySQLdb.connect(host='localhost') 报 OperationalError: (1045, \"Access denied for user 'root'@'host-name.local'\")。原因:Python 解析 localhost 為機器完整主機名(FQDN),權限表中無 root@host-name.local。

錯誤堆疊

_mysql_exceptions.OperationalError: (1045, "Access denied for user 'root'@'myserver-vuldb.local' (using password: YES)")

錯誤截圖

根因

  • MySQL 權限表按 User + Host 匹配。
  • 遠程連接來自具體 IP,匹配 root@% 或 root@192.168.x.%。
  • 本地 Python 解析 localhost → 系統主機名 myserver-vuldb.local → 嘗試匹配 root@myserver-vuldb.local → 無此授權 → 1045。

修復:顯式授權該主機名

mysql -u root -p
GRANT ALL PRIVILEGES ON testDB.* TO 'root'@'myserver-vuldb.local' IDENTIFIED BY '1234';
FLUSH PRIVILEGES;

通用模板:GRANT 權限 ON db.* TO 'user'@'具體主機名' IDENTIFIED BY 'pwd';

驗證

SELECT Host, User FROM mysql.user WHERE User='root';

確認新增行 root | myserver-vuldb.local 存在。

最佳實踐

  • 應用配置避免使用 localhost,改用 127.0.0.1(走 TCP)或 localhost 配合 skip-name-resolve 禁用主機名解析。
  • 授權採用最小權限原則:按具體庫、具體 IP/主機名授權,避免 root@%。
  • 定期審計 mysql.user 表,清理無用授權。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved