MySQL 預設只允許本地連接,這是出於安全考量。但實際開發或部署時,往往需要從遠程主機連接資料庫。本文整理了兩種主流解決方案,並補充關鍵步驟,助你快速打通遠程連線。
核心思路是將 mysql.user 表中 root 用戶的 host 欄位從 localhost 改為 %(通配符,表示任意主機)。
mysql -u root -pUSE mysql;UPDATE user SET host = '%' WHERE user = 'root';FLUSH PRIVILEGES; (許多教程漏掉此步,導致修改不生效)SELECT host, user FROM user; 確認 root 的 host 已變為 %使用 GRANT 語句為指定用戶分配遠程連線權限,可精確控制 IP、資料庫、表甚至欄位級別的權限。
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'mypassword' WITH GRANT OPTION;
FLUSH PRIVILEGES;# 在 MySQL 服務器上執行
mysql -h localhost -u root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT;
my.cnf 或 my.ini 中 bind-address = 127.0.0.1,需改為 0.0.0.0 或註釋掉後重啟服務。IDENTIFIED BY 需分開寫,建議先 CREATE USER 再 GRANT。「授權法」比「改表法」更安全、可控,生產環境強烈建議使用。配合防火牆與最小權限原則,即可兼顧便利與安全。