最近在研究一個服務,這個服務需要 DB 支持,而我選擇使用 Open Source 的 MariaDB(關於 MariaDB 的歷史可以參考這裡),就在裝完之後從外部用工具連線時,出現了這個畫面 - Host 'x.x.x.x' is not allowed to connect to this MariaDB server
。
找到了在官網就有說明了如何用 Remote Client 來 Access MariaDB ,會這樣主要是因為 MySQL 為了安全的因素,預設 root 帳號只能從本機 localhost 連線登入。
想要從外部連線登入 MariaDB 有兩種方法:
- 開放 root 可以從其他 Host 連線登入。
- 建一個新的帳號,提供給想要連線登入的 Host 使用。
在我的測試環境,我選擇「1. 開放 root 可以從其他 Host 連線登入。
」來解決這個問題,首先我們先從本機用 root 帳號登入 MariaDB。
登入後我們 SELECT 看看現在使用者帳號的狀況,輸入這行 Query Statement SELECT User, Host FROM mysql.user;
就可以看到現在伺服器中只有 root 這個帳號,而且並不允許外部的 Host 連線使用。
新增一組 root 帳號
我們利用 CREATE USER
的指令來建立一組 root 帳號,並且允許符合 x.x.x.%
這個 pattern 的 IP Address 連線使用,這個 %
符號代表萬用字元,等同於我們常見的 x.x.x.*
格式。
CREATE USER 'root'@'x.x.x.%' IDENTIFIED BY '{密碼}';
建立完後,我們再 SELECT 看看使用者帳號的狀況,就可以看到我們剛剛新增的 root 帳號。
賦予 root 帳號權限
新增完 root 帳號之後,我們還必須賦予它應有的權限,在這裡我賦予剛剛新增的 root 帳號對所有資料庫有所有的權限。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'x.x.x.%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
這個步驟做完之後,就可以從外部用工具連線登入了。