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

MySQL 開啟遠程連接權限配置全流程:bind-address、GRANT、防火牆三步走

     編輯:MySQL 資料庫相關知識

MySQL 默認僅允許本地連接(bind-address=127.0.0.1),開啟遠程訪問需完成「配置文件綁定地址 → 賬號授權主機通配 → 防火牆放行端口」三步。本文提供標準化操作流程與安全加固建議。

步驟 1:修改配置文件綁定地址

# 編輯 /etc/my.cnf 或 /etc/mysql/my.cnf
[mysqld]
# 註釋或修改為 0.0.0.0 監聽所有網卡
# bind-address = 127.0.0.1   ← 註釋掉這行
bind-address = 0.0.0.0        ← 添加這行(或具體內網 IP,如 192.168.1.100)

# 可選:跳過主機名解析,提升連接速度
skip_name_resolve = ON

重啟服務生效:systemctl restart mysqld。驗證:netstat -ltnp | grep 3306 應顯示 0.0.0.0:3306 或指定 IP。

步驟 2:創建/修改賬號授權遠程訪問

MySQL 8.0+ 推薦寫法

-- 1. 創建專用遠程賬號(不建議直接放開 root)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';

-- 2. 授權指定庫/表
GRANT SELECT, INSERT, UPDATE, DELETE ON `app_db`.* TO 'app_user'@'%';

-- 3. 刷新權限
FLUSH PRIVILEGES;

MySQL 5.7 兼容寫法

GRANT ALL PRIVILEGES ON `app_db`.* TO 'app_user'@'%' IDENTIFIED BY 'StrongPass123!';
FLUSH PRIVILEGES;

關鍵說明

  • 'user'@'%':% 通配所有主機(遠程 + 本地)。若需限制網段:'user'@'192.168.1.%'。
  • 嚴禁 GRANT ... TO 'root'@'%':root 遠程登錄是重大安全風險,合規審計必查項。
  • skip_name_resolve=ON 時,Host 列只識別 IP/通配符,不解析主機名。

步驟 3:防火牆/安全組放行 3306 端口

Linux firewalld

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
firewall-cmd --reload

Linux iptables

iptables -A INPUT -p tcp --dport 3306 -s 192.168.1.0/24 -j ACCEPT
iptables-save > /etc/sysconfig/iptables

云廠商安全組(阿里云/騰訊雲/AWS)

  • 入站規則:協議 TCP、端口 3306、授權對象:應用服務器安全組 ID 或具體 CIDR(如 192.168.1.0/24)。
  • 嚴禁 授權對象 0.0.0.0/0(全網開放)。

驗證遠程連接

# 應用服務器執行
mysql -h 192.168.1.100 -u app_user -p'StrongPass123!' -e "SELECT USER(), CURRENT_USER(), VERSION();"

# 或測試連通性
telnet 192.168.1.100 3306
nc -zv 192.168.1.100 3306

安全加固清單(生產必做)

常見連接失敗排查

項目配置
強密碼策略validate_password 插件:長度≥12、大小寫數字特殊字符、過期輪換
SSL/TLS 加密傳輸require_secure_transport=ON,配置 CA/Server/Client 證書,強制 --ssl-mode=VERIFY_IDENTITY
最小權限原則賃戶/應用各用各賬號,僅授權所需庫表、所需操作(SELECT/INSERT...)
審計日誌MariaDB Audit Plugin / MySQL Enterprise Audit 記錄登錄、DDL、DML、錯誤
連接數限制MAX_CONNECTIONS_PER_HOUR、MAX_USER_CONNECTIONS 防止單賬號佔滿
定期審計排查無用賬號、過期權限、弱密碼、異常登錄 IP

總結

MySQL 遠程連接三步走:配置 bind-address=0.0.0.0 → 授權 'user'@'%'(非 root) → 防火牆放行 3306(限定 CIDR)。
安全底線:無 SSL 不上公網、無審計不上生產、無最小權限不授權。將此流程固化為運維 SOP,納入變更管理體系。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
現象可能原因排查命令
Can't connect to MySQL server (110/111)防火牆阻攔 / bind-address 未改 / 服務未啟動telnet ip 3306、netstat -ltnp、firewall-cmd --list-all
Access denied for user 'x'@'ip'賬號 Host 不匹配 / 密碼錯誤 / skip_name_resolve 導致主機名不匹配SELECT User, Host FROM mysql.user WHERE User='x';
Host 'x' is not allowed to connect同上同上
SSL 握手失敗證書過期/不匹配 / 客戶端未配置 CAmysql --ssl-mode=VERIFY_CA ...