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

Ubuntu 開放 MySQL 遠程訪問:bind-address 配置與權限授權雙重保障

     編輯:MySQL 資料庫相關知識

雙重配置原則

MySQL 遠程訪問需同時滿足:

  1. 網路層:bind-address 監聽 0.0.0.0 或指定 IP
  2. 權限層:建立允許遠程主機的用戶帳號

缺一不可。

步驟一:修改網路綁定


sudo vim /etc/mysql/my.cnf
# 或 /etc/mysql/mysql.conf.d/mysqld.cnf (Ubuntu 16.04+)

# 找到
bind-address = 127.0.0.1
# 改為
bind-address = 0.0.0.0
# 允許所有介面監聽;或指定具體 IP:bind-address = 192.168.1.100

步驟二:重啟 MySQL 生效


sudo systemctl restart mysql
# 或舊版
sudo /etc/init.d/mysql restart

步驟三:授權遠程用戶


mysql -uroot -p
-- 建立允許任意主機(%)連線的用戶
CREATE USER 'app_user'@'%' IDENTIFIED BY 'strong_password';
-- 或修改現有 root(不建議生產用 root 遠程)
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;

-- 授權特定資料庫
GRANT ALL PRIVILEGES ON mydb.* TO 'app_user'@'%';
FLUSH PRIVILEGES;

驗證連線


# 客戶端機器測試
mysql -uapp_user -p -h  -P 3306
# 成功進入提示符即通

防火牆與雲端安全組

  • Ubuntu UFW:sudo ufw allow from 192.168.1.0/24 to any port 3306(限制來源 IP 段)
  • AWS SG / 阿里云安全組 / GCP 防火牆規則:入站規則開放 TCP 3306,來源設為應用伺服器 IP 或 CIDR,禁止 0.0.0.0/0

安全最佳實踐

  • 專用應用帳號,最小權限原則(僅授權所需庫/表)
  • 強密碼 + 定期輪換
  • 啟用 SSL/TLS 加密傳輸:REQUIRE SSL 於 GRANT 子句
  • 禁用 root 遠程登入
  • 審計日誌記錄所有連線嘗試

常見問題排查

現象可能原因排查
Connection refusedbind-address 未改、服務未重啟、防火牆攔截netstat -ntlp | grep 3306;telnet ip 3306
Access denied for user用戶/密碼錯、宿主不匹配(%' vs 具體 IP)SELECT User,Host FROM mysql.user;SHOW GRANTS
Host 'x.x.x.x' is not allowedskip-name-resolve 導致反解析失敗my.cnf 加 skip-name-resolve 或授權具體 IP

小結

Ubuntu 開放 MySQL 遠程:bind-address=0.0.0.0 + CREATE USER ...@'%' + GRANT + FLUSH PRIVILEGES + 防火牆放行。安全第一:專用帳號、最小權限、SSL、來源 IP 限制。

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