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

MySQL root 用戶無法遠程登入:授權法、改表法、防火牆 3306、bind-address 四步解決

     編輯:MySQL 綜合教學

現象

本機 root 可登入,遠程工具連線報錯 Access denied for user 'root'@'x.x.x.x' 或連線逾時。

四大必要條件(缺一不可)

1. 授權法:建立遠程 root 帳號

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'StrongPass123!' WITH GRANT OPTION;
FLUSH PRIVILEGES;
  • 'root'@'%' 允許任意 IP(生產建議改具體 IP:'root'@'192.168.1.%')
  • WITH GRANT OPTION 允許該帳號再授權

2. 改表法:直接操作 mysql.user 表(等效授權法)

USE mysql;
INSERT INTO user (Host, User, authentication_string, ssl_cipher, x509_issuer, x509_subject)
VALUES ('%', 'root', PASSWORD('StrongPass123!'), '', '', '');
FLUSH PRIVILEGES;

結果驗證:

SELECT Host, User FROM mysql.user WHERE User='root';
+-----------+------+
| Host      | User |
+-----------+------+
| %         | root |  <-- 關鍵行
| 127.0.0.1 | root |
| localhost | root |
+-----------+------+

3. 防火牆開放 3306 埠

# CentOS 7 / RHEL 7 firewalld
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload

# iptables 傳統
iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
service iptables save

# 阿里雲/雲廠商安全組:控制台添加入站規則 3306/TCP 允許來源 IP

4. bind-address 設定(如有配置)

# my.cnf
[mysqld]
bind-address = 0.0.0.0  # 監聽所有介面
# 或具體 IP
bind-address = 192.168.1.100

# 註解掉或設 0.0.0.0 後必須重啟
systemctl restart mysqld

⚠️ 若配置檔無此項,預設即為 0.0.0.0(全介面監聽),無需添加。

驗證清單

步驟指令預期結果
本機連線mysql -uroot -p成功
遠程連線mysql -h ServerIP -uroot -p成功
埠監聽netstat -nat | grep 3306LISTEN 0.0.0.0:3306
用戶存在SELECT Host,User FROM mysql.user WHERE User='root';含 '%' 行

常見誤區

  • 只做授權不開防火牆 → 連線逾時
  • 只開防火牆不授權 → Access denied
  • bind-address=127.0.0.1 → 僅本機可連
  • 密碼含特殊字符未轉義 → 登入失敗

安全建議

  1. 生產環境**禁止** root@'%',建立專用運維帳號 admin@'10.0.0.%'
  2. 啟用 SSL:REQUIRE SSL 在 GRANT 中
  3. 限制來源 IP:安全組 + Host 欄雙重防護
  4. 定期輪換密碼、審計遠程登入日誌
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved