首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 允許 Root 遠程連接的完整設定指南

     編輯:MySQL 資料庫相關知識

前言

預設情況下,MySQL 的 root 帳號僅允許本地連接(localhost),出於安全考量,遠程連接功能是關閉的。但在開發、測試或特定部署架構中,我們常需要從其他主機以 root 身分連線管理資料庫。本文將詳細說明兩種主流方法:授權法(GRANT)與修改表法(UPDATE user 表),並附上實際操作範例與驗證步驟。

方法一:授權法(推薦,適用於 MySQL 5.7+ / 8.0)

使用 GRANT 語句建立可遠程登入的帳號,這是官方建議的標準做法,權限控制更精細。

1. 登入 MySQL 並建立遠程帳號

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。

2. 驗證帳號是否建立成功

SELECT host, user, authentication_string FROM mysql.user WHERE user = 'root';

預期輸出應包含 % | root | *加密密碼 這一行。

方法二:修改 user 表法(舊版 MySQL 或快速測試適用)

直接操作 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。

常見問題與解決方案

1. 連線被拒絕

  • 檢查 MySQL 設定檔 my.cnf(Linux)或 my.ini(Windows)中 [mysqld] 區段是否有 bind-address = 127.0.0.1,改為 0.0.0.0 或註解掉,重啟服務。
  • 確認防火牆已開放 3306 埠(或自訂埠)。

2. 權限不足

確保執行 FLUSH PRIVILEGES; 讓權限立即生效,或重啟 MySQL 服務。

3. MySQL 8.0 加密插件問題

若客戶端版本較舊報錯 caching_sha2_password,可將該帳號改用舊式加密:

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;

安全性最佳實踐

  1. 生產環境嚴禁使用 root 遠程登入,應建立專用帳號並授予最小必要權限。
  2. 限制來源 IP:將 % 改為應用伺服器的固定 IP。
  3. 使用強密碼並定期輪換。
  4. 用 SSL 連線加密傳輸。
  5. 配置防火牆規則,僅允許受信任 IP 存取 3306 埠。

總結

本文提供了兩種啟用 MySQL root 遠程連接的方法:標準的 GRANT 授權法與直接修改 user 表法。實務上強烈建議採用授權法,並遵循最小權限原則、限制來源 IP、啟用 SSL 等安全措施,確保資料庫在方便管理的同時不成為安全隱憂。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved