預設情況下,MySQL 僅允許本地連線。若需開放遠程存取,必須在權限系統中建立允許任意主機(%)連線的使用者帳號。本文說明正確的授權流程,避免常見的「Field doesn't have a default value」與「Host not allowed」錯誤。
嘗試直接插入使用者記錄:
INSERT INTO mysql.user (Host, User, Password) VALUES ('%', 'hadoop', '1');
在啟用 STRICT_TRANS_TABLES 模式(預設開啟)時,會拋出錯誤:
ERROR 1364 (HY000): Field 'ssl_cipher' doesn't have a default value
原因在於 mysql.user 表包含多個無預設值的欄位,嚴格模式下不允許隱性預設值插入。
MySQL 內建權限指令會自動處理系統欄位,語法如下:
-- 授予所有權限給 hadoop 使用者,允許任意主機連線,密碼設為 1 GRANT ALL PRIVILEGES ON *.* TO 'hadoop'@'%' IDENTIFIED BY '1' WITH GRANT OPTION; -- 立即刷新權限快取使設定生效 FLUSH PRIVILEGES;
ALL PRIVILEGES:授予所有權限(SELECT、INSERT、UPDATE、DELETE 等)ON *.*:套用至所有資料庫的所有資料表'hadoop'@'%':使用者 hadoop 可從任意主機(% 通配符)連線IDENTIFIED BY '1':設定認證密碼WITH GRANT OPTION:允許該使用者再將權限授予其他使用者FLUSH PRIVILEGES:將權限表變更載入記憶體,立即生效於遠程客戶機執行:
mysql -u hadoop -h-p1
若成功進入 MySQL 監視器,即表示遠程授權設定完成。
% 替換為具體 IP(如 '192.168.1.100')mysql.user 表,移除無用帳號