GRANT privileges ON database.table TO 'username'@'host' IDENTIFIED BY 'password' [WITH GRANT OPTION];
-- 建立用戶並授予所有資料庫所有權限
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
說明:% 為通配符,代表任意 IP。生產環境嚴禁使用。
-- 僅允許 192.168.1.3 連線
CREATE USER 'myuser'@'192.168.1.3' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.3' WITH GRANT OPTION;
FLUSH PRIVILEGES;
-- 僅授予 app_db 資料庫的讀寫權限
CREATE USER 'app_user'@'10.0.0.%' IDENTIFIED BY 'strong_password';
GRANT SELECT, INSERT, UPDATE, DELETE ON `app_db`.* TO 'app_user'@'10.0.0.%';
FLUSH PRIVILEGES;
FLUSH PRIVILEGES;# CentOS 7+
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.3" port protocol="tcp" port="3306" accept'
firewall-cmd --reload
/etc/my.cnf 或 my.ini)
[mysqld]
bind-address = 0.0.0.0 # 監聽所有介面,預設 127.0.0.1 僅本機
修改後 必須重啟 MySQL 服務
# 客戶端測試
mysql -h 192.168.1.100 -u myuser -p
# 或使用 telnet 測試埠連通性
telnet 192.168.1.100 3306
root 遠程登入,建議 RENAME USER 'root'@'%' TO 'admin'@'%';REQUIRE SSLSHOW GRANTS FOR 'user'@'host';| 錯誤代碼 | 原因 | 解決方法 |
|---|---|---|
| 1130 (HY000) | Host not allowed | 檢查用戶 host 欄位、防火牆、bind-address |
| 1045 (28000) | Access denied | 密碼錯誤、用戶不存在、權限不足 |
| 2003 (HY000) | Can't connect | MySQL 未啟動、埠未開放、bind-address 錯誤 |