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

MySQL 開放遠程訪問完整配置:bind-address、用戶授權與防火牆三步走

     編輯:MySQL 綜合教學

核心三步驟

  1. 配置檔綁定地址:修改 bind-address 允許非本地連接。
  2. 建立遠程用戶並授權:CREATE USER ... @'%' + GRANT。
  3. 防火牆/安全組放行 3306 埠:OS 層面允許入站流量。

步驟 1:修改配置檔 (my.cnf / my.ini)

Linux (/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 (多網卡場景)
# bind-address = 192.168.1.100

# 重啟生效
systemctl restart mysqld

Windows (my.ini,通常在安裝目錄或 C:\ProgramData\MySQL\MySQL Server 8.0\)

[mysqld]
bind-address = 0.0.0.0
# 重啟服務
net stop mysql80
net start mysql80

驗證監聽狀態

# Linux
ss -lntp | grep 3306
netstat -lntp | grep 3306

# Windows
netstat -ano | findstr 3306
# 應顯示 0.0.0.0:3306 或 :::3306 (IPv6)

步驟 2:建立遠程用戶與精準授權

登入 MySQL

mysql -u root -p

方案 A:通配符主機 (最常用,開發/測試)

-- 建立用戶 (MySQL 8.0 語法)
CREATE USER 'app_user'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';

-- 授權:指定庫、表、權限
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%';
-- 或全部權限 (慎用)
GRANT ALL PRIVILEGES ON app_db.* TO 'app_user'@'%';

-- 刷新權限
FLUSH PRIVILEGES;

方案 B:指定 IP/網段 (生產環境推薦,最小權限原則)

-- 單一 IP
CREATE USER 'app_user'@'192.168.1.50' IDENTIFIED BY 'StrongP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.50';

-- 網段 (需 MySQL 8.0.14+ 支援 CIDR,否則用通配符)
CREATE USER 'app_user'@'192.168.1.%' IDENTIFIED BY 'StrongP@ssw0rd!';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'192.168.1.%';

方案 C:修改現有 root 用戶允許遠程 (極不推薦生產使用)

-- 查看現有用戶
SELECT User, Host FROM mysql.user;

-- 修改 root host (僅 5.7/8.0 可直接 UPDATE,8.0 建議用 RENAME USER)
-- 5.7
UPDATE mysql.user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;

-- 8.0 (推薦)
RENAME USER 'root'@'localhost' TO 'root'@'%';
-- 或保留 localhost 另建遠程 root
CREATE USER 'root'@'%' IDENTIFIED BY 'StrongP@ssw0rd!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;

步驟 3:防火牆與雲安全組放行

Linux firewalld (CentOS 7/8、RHEL、Fedora)

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# 或僅允許特定 IP
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

Linux iptables (傳統)

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

Ubuntu ufw

ufw allow from 192.168.1.0/24 to any port 3306
ufw enable

Windows 防火牆

# PowerShell 管理員
New-NetFirewallRule -DisplayName "MySQL 3306" -Direction Inbound -LocalPort 3306 -Protocol TCP -Action Allow -RemoteAddress 192.168.1.0/24

雲廠商安全組 (AWS SG / 阿里云安全組 / 腾讯云安全組)

  • 入站規則:協議 TCP、埠 3306、來源 具體 IP/網段 (禁止 0.0.0.0/0)。
  • 出站規則:通常預設全開,無需額外配置。

連線驗證與常見報錯排查

客戶端測試

# 命令列
mysql -h 192.168.1.100 -u app_user -p -P 3306

# GUI 工具
# Host: 192.168.1.100, Port: 3306, User: app_user, Password: ******

常見錯誤對照表

生產環境安全加固清單

  1. 禁用 root 遠程登入:僅允許 root@localhost 或 root@127.0.0.1。
  2. 最小權限原則:應用用戶僅授予必要庫、必要增刪改查權限,禁止 DROP、ALTER、GRANT。
  3. 強密碼策略:validate_password 插件強制長度、複雜度、過期輪換。
  4. 啟用 SSL 加密傳輸:require_secure_transport=ON,配置 CA/Server/Client 憑證。
  5. 審計日誌:audit_log 記錄所有連線、DDL、DML 操作。
  6. 定期審計用戶:SELECT User, Host FROM mysql.user WHERE Host='%'; 清理無用遠程用戶。

總結

「配置檔綁 0.0.0.0 → 建用戶@% 授權 → 防火牆放行 3306」三步缺一不可。生產環境務必遵循最小權限、網段限制、SSL 加密、審計追蹤四大原則,將 MySQL 遠程訪問風險降至最低。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
錯誤碼/訊息原因解決
ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect用戶 Host 不匹配建立 'user'@'%' 或具體 IP 用戶
ERROR 2003 (HY000): Can't connect to MySQL server on 'host' (110/111)網絡不通/防火牆攔截/bind-address 錯誤檢查 ping、telnet 3306、防火牆、bind-address=0.0.0.0
ERROR 1045 (28000): Access denied for user 'user'@'host'密碼錯誤/用戶不存在/權限不足確認密碼、FLUSH PRIVILEGES、GRANT 權限
SSL connection error / cipher mismatch客戶端/服務端 SSL 協議不一致連接加 --ssl-mode=DISABLED 或配置 SSL 憑證
Authentication plugin 'caching_sha2_password' cannot be loaded8.0 預設插件舊客戶端不支援用戶改用 mysql_native_password 或升級客戶端/驅動