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

MySQL 開啟遠程訪問配置指南:授權、防火牆與驗證

     編輯:MySQL 資料庫相關知識

MySQL 開啟遠程訪問配置指南

MySQL 默認僅允許 localhost 本地連接,遠程訪問需從賬號授權、綁定地址、防火牆、SELinux 多層面配置。本文提供標準化配置流程與驗證步驟。

一、核心原理

  • 用戶賬號格式:'user'@'host',host 決定允許連接的來源 IP/主機名。
  • % 通配符匹配任意主機 (含遠程);localhost 僅匹配本地 Socket 連接。
  • 授權表 mysql.user 的 Host 列直接控制訪問來源。

二、創建遠程訪問賬號 (推薦)

# 1. 登入 MySQL
mysql -u root -p

# 2. 創建用戶並授權 (指定 IP 段最安全)
CREATE USER 'remote_user'@'192.168.1.%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'remote_user'@'192.168.1.%';
FLUSH PRIVILEGES;

# 3. 或全網段通配 (僅受信內網)
CREATE USER 'remote_user'@'%' IDENTIFIED BY 'StrongPass123!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'remote_user'@'%';
FLUSH PRIVILEGES;

三、修改現有用戶允許遠程

# 方法 1:更新 Host 列 (需 FLUSH PRIVILEGES)
USE mysql;
UPDATE user SET Host='%' WHERE User='existing_user' AND Host='localhost';
FLUSH PRIVILEGES;

# 方法 2:重新授權 (推薦,自動處理密碼加密)
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'existing_user'@'%' IDENTIFIED BY 'SamePass';
FLUSH PRIVILEGES;

四、服務端綁定地址配置

# my.cnf [mysqld]
bind-address = 0.0.0.0        # 監聽所有網卡 (IPv4)
# bind-address = ::           # 監聽所有 IPv6
# bind-address = 192.168.1.10 # 僅監聽特定內網 IP

# 重啟生效
systemctl restart mysqld

# 驗證監聽
ss -tlnp | grep 3306
# 應顯示 0.0.0.0:3306 或 :::3306

五、防火牆放行 3306 端口

# firewalld (CentOS 7+/RHEL 7+)
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port protocol="tcp" port="3306" accept'
firewall-cmd --reload

# iptables (舊版)
iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
iptables-save > /etc/sysconfig/iptables

# ufw (Ubuntu)
ufw allow from 192.168.1.0/24 to any port 3306
ufw enable

六、SELinux 設置 (CentOS/RHEL)

# 允許 MySQL 連接網絡
setsebool -P mysql_connect_any=1

# 或自定義端口標籤 (非標準端口)
semanage port -a -t mysqld_port_t -p tcp 3307

七、驗證遠程連接

# 客戶端測試
mysql -h 192.168.1.100 -u remote_user -p -e "SELECT USER(), CURRENT_USER();"

# 檢查連接來源
mysql -h 192.168.1.100 -u remote_user -p -e "SHOW PROCESSLIST;"
# Host 列應顯示客戶端 IP:Port

# 抓包驗證
tcpdump -i eth0 -nn port 3306

八、常見故障排查

現象原因解決
ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed用戶 Host 不匹配GRANT ... TO 'user'@'x.x.x.x' 或 '%'
ERROR 2003 (HY000): Can't connect to MySQL server (110/111)網路不通/防火牆/bind-addressping/telnet 3306;檢查防火牆、bind-address=0.0.0.0
ERROR 1045 (28000): Access denied for user密碼錯誤/認證插件不匹配確認密碼;8.0 默認 caching_sha2_password,舊客戶端需 ALTER USER ... IDENTIFIED WITH mysql_native_password
SSL connection required用戶 REQUIRE SSL客戶端加 --ssl-mode=REQUIRED 或移除 REQUIRE SSL

九、安全加固建議

  1. 最小權限:僅授業務必要庫表權限,拒絕 GRANT ALL ON *.*。
  2. IP 白名單:'user'@'192.168.1.%' 替代 '%',配合防火牆源 IP 限制雙重防護。
  3. 強密碼策略:啟用 validate_password 插件,長度≥12、複雜度、過期輪換。
  4. SSL 加密傳輸:生產環境強制 REQUIRE SSL,防止明文密碼/數據竊聽。
  5. 非標準端口:修改 port=3306 為高位端口 (如 13306),減少掃描噪音。
  6. 審計日誌:部署 audit_log 記錄所有登入/查詢/錯誤。

遠程訪問配置的核心是「賬號 Host 匹配 + 服務端監聽地址 + 網路通達」。按步驟逐層驗證,配合安全基線,即可安全開放 MySQL 遠程服務。

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