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

MySQL 遠程訪問配置完整指南:從網絡到權限

     編輯:MySQL 綜合教學

MySQL 遠程訪問配置完整指南:從網絡到權限

「無法連接遠程 MySQL」是運維高頻問題。本文系統梳理防火牆、綁定地址、用戶授權、驗證插件四大環節,提供生產環境可落地的配置清單。

前置條件檢查清單

  1. 目標服務器 3306 端口(或自定義端口)防火牆放行
  2. MySQL 配置 bind-address 允許非本地連接
  3. 創建允許遠程主機的用戶並授權
  4. 客戶端網絡可達(ping/telnet/nc 驗證)

步驟 1:防火牆放行端口

Linux (firewalld)

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

Linux (iptables)

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

云服务商安全组

阿里云/騰訊云/AWS 控制台 → 安全組入站規則 → 添加 TCP 3306,來源按需設為具體 IP 或 0.0.0.0/0。

步驟 2:修改 MySQL 綁定地址

編輯 /etc/my.cnf(或 /etc/mysql/mysql.conf.d/mysqld.cnf):

[mysqld]
# 註釋或修改為 0.0.0.0 監聽所有網卡
# bind-address = 127.0.0.1
bind-address = 0.0.0.0

# 生產環境建議開啟跳過 DNS 反解析,提升連接速度
skip-name-resolve

重啟生效:systemctl restart mysqld

步驟 3:創建遠程用戶並授權(核心)

MySQL 5.7 / 8.0 通用最佳實踐

-- 1. 創建用戶(指定主機 % 表示任意 IP,建議限定具體 IP 段)
CREATE USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'StrongPassw0rd!';

-- 2. 授予特定庫權限(避免 *.*)
GRANT SELECT, INSERT, UPDATE, DELETE, EXECUTE ON `prod_db`.* TO 'app_user'@'10.0.0.%';

-- 3. 刷新權限
FLUSH PRIVILEGES;

常見授權模式對比

需求GRANT 語句
全庫全表所有權限(慎用)GRANT ALL PRIVILEGES ON *.* TO 'user'@'%' IDENTIFIED BY 'pwd' WITH GRANT OPTION;
特定庫所有權限GRANT ALL PRIVILEGES ON `db_name`.* TO 'user'@'%';
特定表讀寫GRANT SELECT, INSERT, UPDATE ON `db`.`orders` TO 'user'@'%';
僅讀賬號GRANT SELECT ON `db`.* TO 'readonly'@'%';

參數詳解

  • user@'host':% 匹配任意主機,192.168.1.% 匹配網段,localhost 僅本地(Unix socket)
  • WITH GRANT OPTION:允許該用戶再授權給他人,極少使用
  • IDENTIFIED BY:5.7 隱式創建用戶,8.0 需先 CREATE USER

步驟 4:驗證連接

# 客戶端測試
mysql -h 192.168.1.100 -u app_user -p -P 3306

# 或使用 telnet 測試端口通斷
telnet 192.168.1.100 3306

常見報錯與排查

錯誤碼原因解決
1130 Host not allowed用戶 host 不匹配檢查 user@'host',需 % 或具體 IP
1045 Access denied密碼錯誤/插件不匹配確認密碼、8.0 檢查 caching_sha2_password vs mysql_native_password
Can't connect (timeout)網絡不通/防火牆/bind-addresstelnet 3306、檢查安全組、my.cnf bind-address
SSL connection required8.0 強制 SSL客戶端加 --ssl-mode=DISABLED 或配置憑證

MySQL 8.0 認證插件兼容性處理

8.0 默認 caching_sha2_password,舊驅動(JDBC 5.x、舊 Navicat、PHP mysqlnd)不支持。

-- 方案 1:創建用戶指定舊插件(推薦過渡期)
CREATE USER 'legacy_user'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';

-- 方案 2:修改現有用戶
ALTER USER 'user'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd';

安全加固建議

  1. 最小權限:按庫、按表、按操作類型授權
  2. IP 白名單:user@'10.0.1.%' 代替 %
  3. 強密碼策略:validate_password 插件強制複雜度
  4. 定期審計:SELECT user, host FROM mysql.user; 清理僵屍賬號
  5. 加密傳輸:生產環境啟用 TLS/SSL

按清單逐項驗證,遠程連接問題迎刃而解。

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