萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

Ubuntu 20.04/22.04 配置 MySQL 8.0 遠程訪問全流程:從密碼重置到防火牆放行

Ubuntu 預設 MySQL 僅監聽 127.0.0.1,且 root 帳號採用 auth_socket 插件(僅允許本地系統 root 用戶免密登入),導致遠程連接雙重受阻。本文提供從「進不去」到「安全遠程訪問」的標準化運維流程。

階段一:解決 root 免密登入並重置密碼

# 1. 讀取 Debian 維護帳號憑證(安裝時自動生成)
sudo cat /etc/mysql/debian.cnf
# user = debian-sys-maint
# password = xxxxxxxxxxxxxxxx

# 2. 使用維護帳號登入
mysql -u debian-sys-maint -p'xxxxxxxxxxxxxxxx'

# 3. 修改 root 密碼並切換認證插件
USE mysql;
-- 8.0 預設 caching_sha2_password,遠程連接建議改 mysql_native_password 兼容性更好
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'NewStrongPass#2024';
FLUSH PRIVILEGES;
QUIT;

階段二:開放網絡監聽

# 編輯配置
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

# 找到 bind-address,修改為:
bind-address = 0.0.0.0    # 監聽所有介面
# 或指定內網 IP:bind-address = 192.168.1.100

# 重啟生效
sudo systemctl restart mysql

# 驗證
ss -tlnp | grep 3306
# 應顯示 0.0.0.0:3306 或 192.168.1.100:3306

階段三:授權遠程訪問帳號

mysql -uroot -p'NewStrongPass#2024'

-- 方案 A:專用遠程帳號(推薦,最小權限原則)
CREATE USER 'app_user'@'%' IDENTIFIED WITH mysql_native_password BY 'AppPass#2024';
GRANT SELECT, INSERT, UPDATE, DELETE ON app_db.* TO 'app_user'@'%';

-- 方案 B:root 遠程(僅內網受信環境,生產嚴禁)
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'NewStrongPass#2024';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;

階段四:系統防火牆放行

# UFW(Ubuntu 預設)
sudo ufw allow from 192.168.1.0/24 to any port 3306 comment 'MySQL Internal'
sudo ufw enable
sudo ufw status numbered

# 或 iptables 直接操作
sudo iptables -A INPUT -s 192.168.1.0/24 -p tcp --dport 3306 -j ACCEPT
sudo iptables-save > /etc/iptables/rules.v4

階段五:雲廠商安全組(必須!)

阿里雲/騰訊雲/AWS/Azure 控制台 → 安全組/安全組規則 → 入站規則:
協議:TCP、端口:3306、來源:具體應用服務器 CIDR(嚴禁 0.0.0.0/0)

驗證遠程連接

# 應用服務器測試
mysql -h 192.168.1.100 -u app_user -p'AppPass#2024' -e "SELECT VERSION();"

# 或使用 GUI 工具
# Host: 192.168.1.100, Port: 3306, User: app_user, Password: AppPass#2024

安全加固清單(上線前必檢)

  1. 禁用 root@'%',僅保留 root@'localhost'。
  2. 所有業務帳號 按庫/表最小權限授權,禁止 GRANT ALL ON *.*。
  3. 啟用 SSL 傳輸:REQUIRE SSL 或配置 ssl_ca/ssl_cert/ssl_key。
  4. 設置 max_connect_errors=100000、connect_timeout=10 防暴力破解。
  5. 定期 SELECT User, Host, plugin FROM mysql.user; 審計帳號。
  6. 部署 ProxySQL 做連接池與讀寫分離,隱藏後端真實 IP。

Ubuntu MySQL 遠程訪問的核心邏輯是:認證插件兼容 → 監聽地址放開 → 賬號授權最小化 → 雙層防火牆(主機+雲)精準放行。按此流程操作,兼顧開發便利與生產安全。

copyright © 萬盛學電腦網 all rights reserved