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

MySQL 安裝後開啟遠程訪問:Host 欄位修改、防火牆、用戶權限三步走

     編輯:MySQL 綜合教學

現象複現

telnet 192.168.41.191 3306
Trying 192.168.41.191...
Connected to 192.168.41.191.
Escape character is '^]'.
G   Host '192.168.41.186' is not allowed to connect to this MySQL server
Connection closed by foreign host.

端口通、防火牆已關,仍報「Host not allowed」 → **MySQL 用戶表 Host 欄位限制**。


根因

MySQL 安裝初始化時,mysql.user 表的 Root 用戶 Host 預設為 localhost / 127.0.0.1 / ::1,**不包含遠程 IP 或通配符 %**。


解決三步走

步驟 1:修改 Host 為通配符 %(或具體 IP)

mysql -uroot -p
USE mysql;
-- 方案 A:改現有 root 行(謹慎,可能影響本地 Socket 連接)
UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

-- 方案 B:新增一行遠程 root(推薦,保留本地 localhost 行)
CREATE USER 'root'@'%' IDENTIFIED BY 'StrongPass@123';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

步驟 2:確認防火牆/安全組放行 3306

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

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

# 雲廠商安全組:入站規則允許 TCP 3306,來源按需限制(如僅應用服務器 CIDR)

步驟 3:檢查 bind-address 配置

# /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
# bind-address = 127.0.0.1  ← 註釋或改為 0.0.0.0 監聽所有網卡
bind-address = 0.0.0.0
# 修改後必須重啟
systemctl restart mysqld

驗證遠程連接

# 遠程機器
mysql -h 192.168.41.191 -uroot -p
# 或指定協議
mysql -h 192.168.41.191 -P 3306 -uroot -p --protocol=tcp

安全加固(生產環境必做)

  1. 禁用 Root 遠程:業務用專用賬號 app_user@'10.0.0.%',Root 僅本地 localhost。
  2. 最小權限:GRANT SELECT,INSERT,UPDATE,DELETE ON biz_db.* TO 'app_user'@'10.0.0.%';
  3. 強密碼 + 定期輪換:配合 validate_password 組件。
  4. SSL 加密傳輸:REQUIRE SSL 在 GRANT 中指定,客戶端配置 CA/證書。
  5. 審計日誌:啟用 audit_log 記錄登入、DDL、DML。

常見誤區

誤區真相
以為防火牆關了就能連MySQL 內部權限表 mysql.user 獨立於 OS 防火牆
改 % 後本地無法連保留 root@localhost 行,或用 --protocol=socket 強制走 Unix Socket
bind-address 不改也能遠程綁定 127.0.0.1 時,外部 TCP 連接直接被內核拒絕,不進 MySQL 層
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved