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

MySQL 遠程訪問配置全攻略:用戶授權、防火牆、SSL 加密、連接池優化

     編輯:MySQL 綜合教學

MySQL 遠程訪問配置完全指南:從用戶授權到生產環境加固

默認僅允許本地訪問,遠程訪問需配置:用戶 Host 授權、bind_address、防火牆、SSL 加密。

一、用戶授權核心原理

MySQL 權限系統基於 mysql.user 表,**用戶 = 用戶名 + Host**。同名不同 Host 視為不同用戶。

二、授權方案對比

方案一:修改現有 root Host(不推薦生產)

USE mysql;
UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
-- 或
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'strong_pass' WITH GRANT OPTION;
FLUSH PRIVILEGES;

風險:root 遠程登錄、全庫全表權限、暴力破解目標。

方案二:創建專用應用用戶(推薦)

-- 創建用戶(指定來源 IP/網段)
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'strong_pass_123';
-- 或特定 IP
CREATE USER 'app_user'@'192.168.1.100' IDENTIFIED BY 'strong_pass_123';

-- 按需授權(最小權限原則)
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.%';
-- 僅讀賬號
GRANT SELECT ON app_db.* TO 'readonly'@'192.168.1.%' IDENTIFIED BY 'pass';

FLUSH PRIVILEGES;

三、服務端網絡配置

# /etc/my.cnf [mysqld]
# 監聽所有接口(默認 127.0.0.1 僅本地)
bind_address = 0.0.0.0
# 或具體內網 IP
bind_address = 192.168.1.10

port = 3306
# 跳過 DNS 解析,加快連接
skip_name_resolve = 1

四、防火牆放行

# firewalld (CentOS 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 -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
iptables-save > /etc/sysconfig/iptables

# 雲廠商安全組:入站規則 3306/tcp 來源 192.168.1.0/24

五、SSL 加密連接(生產環境強制)

# 1. 生成證書(或用 mysqld 自動生成 5.7+)
mysql_ssl_rsa_setup --datadir=/var/lib/mysql

# 2. 配置強制 SSL
# /etc/my.cnf [mysqld]
require_secure_transport = ON
ssl_ca = /var/lib/mysql/ca.pem
ssl_cert = /var/lib/mysql/server-cert.pem
ssl_key = /var/lib/mysql/server-key.pem

# 3. 客戶端驗證
mysql -h 192.168.1.10 -u app_user -p --ssl-mode=VERIFY_CA --ssl-ca=ca.pem

# 4. 用戶強制 SSL
ALTER USER 'app_user'@'192.168.1.%' REQUIRE SSL;
FLUSH PRIVILEGES;

六、連接驗證與故障排查

# 測試連通性
telnet 192.168.1.10 3306
nc -zv 192.168.1.10 3306

# 客戶端連接測試
mysql -h 192.168.1.10 -u app_user -p -e "SELECT USER(), CURRENT_USER();"

# 常見錯誤
# ERROR 1130 (HY000): Host '192.168.1.100' is not allowed to connect
# → 檢查 user 表 Host 欄位、bind_address、防火牆、skip_name_resolve

# ERROR 2026 (HY000): SSL connection error
# → 檢查證書路徑、ssl_mode、服務端 require_secure_transport

七、生產環境加固清單

  • [ ] 禁用 root 遠程登錄
  • [ ] 應用用戶限制來源 IP/網段
  • [ ] 最小權限授權(無 DROP/GRANT/FILE 權限)
  • [ ] 強制 SSL 加密傳輸
  • [ ] 防火牆/安全組僅放行應用服務器 IP
  • [ ] 修改默認端口 3306(安全性微弱但可減少掃描)
  • [ ] 审計日誌:audit_log 插件記錄所有操作
  • [ ] 定期輪換密碼、審計賬號權限

遠程訪問 = 攻擊面擴大。遵循「最小權限、最小暴露、加密傳輸、審計可追溯」四原則。雲環境優先使用 VPC 內網、PrivateLink、ProxySQL 中間件,避免數據庫直接暴露公網。

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