預設 MySQL 僅允許 localhost 本機連線。應用與資料庫分離部署時,需開啟遠程訪問權限。
適用於已有帳號,需快速開放所有主機存取。
mysql -u root -p
mysql> USE mysql;
mysql> UPDATE user SET host = '%' WHERE user = 'root';
mysql> SELECT host, user FROM user; -- 驗證
mysql> FLUSH PRIVILEGES;
缺點: 粒度粗暴,將 root 開放給全網,安全風險極高,**生產環境嚴禁對 root 使用此法**。
遵循最小權限原則,建立專用遠程帳號,精確控制主機、資料庫、權限。
mysql -h localhost -u root -pGRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;GRANT SELECT,INSERT,UPDATE,DELETE ON mydb.* TO 'appuser'@'192.168.1.100' IDENTIFIED BY 'apppass';FLUSH PRIVILEGES;EXIT;# 遠程機器測試
mysql -h 192.168.1.50 -u myuser -p
Enter password: mypassword
UPDATE mysql.user SET host='localhost' WHERE user='root'; FLUSH PRIVILEGES;'%',改用具體應用伺服器 IP 或 CIDR 範圍 (MySQL 8.0+ 支援 '192.168.1.%')REQUIRE SSL 強制加密傳輸| 現象 | 原因 | 解決 |
|---|---|---|
| ERROR 1130 (HY000): Host not allowed | 帳號 Host 欄位不匹配 | 檢查 SELECT host,user FROM mysql.user;,確認有對應 % 或具體 IP |
| 連線逾時 | 防火牆/安全組阻擋 3306 | 雲端控制台/本機防火牆放行埠 |
| SSL 連線失敗 | 啟用 SSL 但客戶端未配置憑證 | 客戶端加 --ssl-mode=DISABLED 或配置 CA 憑證 |
採用 GRANT 授權法配合網路層防火牆,才是生產環境開啟遠程訪問的正確姿勢。