預設情況下,MySQL 的 root 帳號僅允許本地連接(localhost),出於安全考量,遠程連接功能是關閉的。但在開發、測試或特定部署架構中,我們常需要從其他主機以 root 身分連線管理資料庫。本文將詳細說明兩種主流方法:授權法(GRANT)與修改表法(UPDATE user 表),並附上實際操作範例與驗證步驟。
使用 GRANT 語句建立可遠程登入的帳號,這是官方建議的標準做法,權限控制更精細。
mysql -u root -p
在 MySQL 客戶端中執行以下指令,建立一個允許從任意 IP(%)以 root 密碼登入的帳號:
CREATE USER 'root'@'%' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
說明:
%代表允許所有主機連線;生產環境建議改為具體 IP(如192.168.1.100)以提高安全性。WITH GRANT OPTION允許該帳號將權限授予其他用戶。- MySQL 8.0 以上版本若報錯
ERROR 1064,請分兩步執行:先CREATE USER,再GRANT。
SELECT host, user, authentication_string FROM mysql.user WHERE user = 'root';
預期輸出應包含 % | root | *加密密碼 這一行。
直接操作 mysql.user 系統表,將現有 root 的 host 改為 %。注意:此法在 MySQL 5.7+ 可能因 authentication_string 欄位加密方式不同而失效,建議優先用方法一。
USE mysql;
UPDATE user SET host = '%' WHERE user = 'root';
FLUSH PRIVILEGES;
執行後同樣用 SELECT host, user FROM user; 確認是否出現 % | root。
my.cnf(Linux)或 my.ini(Windows)中 [mysqld] 區段是否有 bind-address = 127.0.0.1,改為 0.0.0.0 或註解掉,重啟服務。確保執行 FLUSH PRIVILEGES; 讓權限立即生效,或重啟 MySQL 服務。
若客戶端版本較舊報錯 caching_sha2_password,可將該帳號改用舊式加密:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;
% 改為應用伺服器的固定 IP。本文提供了兩種啟用 MySQL root 遠程連接的方法:標準的 GRANT 授權法與直接修改 user 表法。實務上強烈建議採用授權法,並遵循最小權限原則、限制來源 IP、啟用 SSL 等安全措施,確保資料庫在方便管理的同時不成為安全隱憂。