新裝 MySQL 默認僅允許本地連接,遠程訪問需顯式授權。本文提供三種成熟方案,覆蓋「全網訪問」與「指定 IP 訪問」兩大場景。
mysql> USE mysql;
mysql> UPDATE user SET host = '%' WHERE user = 'root';
mysql> SELECT host, user FROM user; -- 驗證
mysql> FLUSH PRIVILEGES;
將 host 從 localhost 改為 %(通配符),允許任意主機連接。
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'cx' WITH GRANT OPTION;
FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'test'@'10.40.207.17' IDENTIFIED BY 'cx' WITH GRANT OPTION;
FLUSH PRIVILEGES;
mysql -h localhost -u root
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
EXIT
| 方案 | 優點 | 缺點 | 適用場景 |
|---|---|---|---|
| 改表法 | 簡單直接 | 繞過權限系統,易留隱患 | 緊急臨時調試 |
| GRANT 法 | 標準、支援細粒度權限、可撤銷 | 語法稍繁 | 生產環境標準做法 |
| 命令行直授 | 適合腳本自動化 | 密碼明文風險 | Ansible/Shell 批量部署 |
GRANT SELECT,INSERT,UPDATE ON db.* TO 'app'@'10.0.0.%'REQUIRE SSLSHOW GRANTS 審計權限
# 客戶端測試
mysql -h 192.168.1.108 -u root -p
# 或
telnet 192.168.1.108 3306