MySQL 預設僅允許 localhost 連線,遠程連線需解決兩層限制:
1. 帳號宿主限制(mysql.user.Host 欄位)
2. 網路綁定限制(my.cnf 的 bind-address)
mysql -u root -p
USE mysql;
UPDATE user SET Host='%' WHERE User='root' AND Host='localhost';
FLUSH PRIVILEGES;
SELECT Host, User FROM user; -- 驗證
風險:root@% 允許任意 IP 以 root 登入,生產環境極度不建議。
-- 允許 kevin 從任意 IP 連線
GRANT ALL PRIVILEGES ON *.* TO 'kevin'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
-- 僅允許特定 IP
GRANT ALL PRIVILEGES ON *.* TO 'kevin'@'192.168.101.234' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;
*.*。CREATE USER 'kevin'@'192.168.101.234' IDENTIFIED BY 'mypassword';
GRANT ALL ON mydb.* TO 'kevin'@'192.168.101.234';vi /etc/mysql/my.cnf 或 /etc/my.cnf[mysqld] 區段,註釋或修改:# bind-address = 127.0.0.1bind-address = 0.0.0.0(監聽所有介面)service mysql restart若雲端伺服器(AWS/Azure/GCP)有安全群組/防火牆,務必同步開放 3306 埠 給來源 IP。
| 層級 | 檢查項目 | 指令/位置 |
|---|---|---|
| 帳號 | user 表 Host 欄位是否為 % 或特定 IP | SELECT User, Host FROM mysql.user; |
| 權限 | GRANT 是否生效 | SHOW GRANTS FOR 'user'@'host'; |
| 網路 | bind-address 是否為 0.0.0.0 或註釋 | /etc/mysql/my.cnf |
| 防火牆 | 3306 埠是否放行 | iptables -L / ufw status / firewall-cmd |
| 雲端 | 安全群組入站規則 | 雲端控制台 |
