[廚餘回收] 裝完 MariaDB 後無法從外部連線到伺服器!?

最近在研究一個服務,這個服務需要 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 有兩種方法:

  1. 開放 root 可以從其他 Host 連線登入。
  2. 建一個新的帳號,提供給想要連線登入的 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;

這個步驟做完之後,就可以從外部用工具連線登入了。

雖然我在我的測試環境是開放 root 帳號允許其他 Host 連線使用,但是如果是在 production 的機器上建議另外建立帳號,並且做嚴格的權限控管。

相關資源

C# 指南
ASP.NET 教學
ASP.NET MVC 指引
Azure SQL Database 教學
SQL Server 教學
Xamarin.Forms 教學