出現錯誤 ERROR 1130 (HY000): Host 'db01' is not allowed to connect to this MariaDB server
,表示當前用戶 test
沒有足夠的權限從主機 db01
連接到 MariaDB 服務器。以下是逐步解決方案:
1. 檢查用戶權限
登錄 MariaDB 服務器(需本地或通過其他有權客戶端),執行以下命令查看用戶權限:
SELECT user, host FROM mysql.user WHERE user = 'test';
- 如果
host
列顯示為localhost
或具體 IP(非db01
的 IP),說明用戶test
未被授權從db01
連接。
2. 授予遠程訪問權限
根據需求選擇以下任意一種方式:
方案 1:允許從任意主機連接(推薦用于測試環境)
GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
'%'
表示允許所有主機(包括db01
)連接。- 替換
123456
為實際密碼。
方案 2:僅允許從特定主機(如 db01
)連接
假設 db01
的 IP 是 172.16.3.51
,則執行:
GRANT ALL PRIVILEGES ON *.* TO 'test'@'172.16.3.51' IDENTIFIED BY '123456' WITH GRANT OPTION;
FLUSH PRIVILEGES;
- 若需允許
172.16.3.0/24
網段的所有 IP,可使用'172.16.3.%'
。
3. 處理可能的沖突
如果執行 GRANT
時提示 ERROR 1062 (23000): Duplicate entry
(如已存在 'test'@'%'
或類似記錄),需先刪除沖突記錄:
DELETE FROM mysql.user WHERE user = 'test' AND host = '%'; -- 示例
FLUSH PRIVILEGES;
再重新執行 GRANT
命令。
4. 驗證防火墻設置
確保 MariaDB 服務器的 3306 端口 對 db01
的 IP 開放:
- Linux 防火墻:檢查
firewalld
或iptables
規則。firewall-cmd --permanent --add-source=172.16.3.51 --zone=public firewall-cmd --reload
- 云服務器:檢查安全組是否放行 3306 端口(入方向)。
5. 重啟 MariaDB 服務
部分情況下需重啟服務以應用配置:
sudo systemctl restart mariadb
最終驗證
在 db01
上重新執行連接命令:
mysql -utest -p123456 -h172.16.3.51
若成功連接,問題解決。
補充說明
- 安全性建議:生產環境中避免使用
'%'
,改為限定具體 IP 或網段。 - 密碼復雜度:建議將簡單密碼(如
123456
)改為復雜密碼,避免安全風險。
參考來源:MySQL 官方文檔、搜索結果中多個權限配置案例[1][2][3][4][5]。