預設情況下 MySQL 僅允許 localhost 連線,生產環境往往需要開放遠程訪問。本文對比「改表法」與「授權法」兩大流派,詳細講解 GRANT ALL PRIVILEGES 的各種授權場景、FLUSH PRIVILEGES 的必要性,以及常見坑點與安全加固建議。
| 維度 | 改表法(直接修改 mysql.user 表) | 授權法(GRANT 語句) |
|---|---|---|
| 操作對象 | mysql.user 表的 host 字段 | 通過 GRANT 建立/更新用戶權限記錄 |
| 風險等級 | 高(易誤改導致無法登入) | 低(語法檢查、權限原子性) |
| 適用版本 | MySQL 5.7 及之前 | 全版本(MySQL 8.0+ 推薦) |
| 密碼管理 | 需手動 UPDATE authentication_string | 語句中直接 IDENTIFIED BY |
| 推薦指數 | ⭐⭐ | ⭐⭐⭐⭐⭐ |
結論:強烈建議使用標準 GRANT 授權法,MySQL 8.0 已棄用直接操作 mysql.user 表的方式。
GRANT ALL PRIVILEGES ON db_name.tbl_name TO 'user'@'host' IDENTIFIED BY 'password' [WITH GRANT OPTION];
db_name.tbl_name:*.* 表示所有庫所有表;db.* 表示某庫所有表'user'@'host':host 可為 %(任意 IP)、具體 IP、IP 段(192.168.1.%)、域名WITH GRANT OPTION:允許該用戶將權限再授予他人(生產環境慎用)GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'StrongP@ssw0rd' WITH GRANT OPTION; FLUSH PRIVILEGES;
-- 僅允許 192.168.1.0/24 網段訪問 dk 庫 GRANT ALL PRIVILEGES ON dk.* TO 'myuser'@'192.168.1.%' IDENTIFIED BY 'StrongP@ssw0rd'; FLUSH PRIVILEGES;
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'192.168.1.6' IDENTIFIED BY 'StrongP@ssw0rd' WITH GRANT OPTION; FLUSH PRIVILEGES;
GRANT SELECT ON *.* TO 'readonly'@'10.0.0.%' IDENTIFIED BY 'ReadOnly@2024'; FLUSH PRIVILEGES;
MySQL 啟動時將權限表載入內存緩存。GRANT 修改的是磁盤表,若不執行 FLUSH PRIVILEGES(或 mysqladmin flush-privileges),新權限不會立即生效,需等待服務重啟或緩存過期。MySQL 8.0+ 部分場景已自動刷新,但手動執行無副作用,建議保留習慣。
validate_password 插件,強制長度≥12、含大小寫數字特殊符號。SELECT/INSERT/UPDATE/DELETE,禁止 ALL PRIVILEGES 含 DROP、ALTER 等 DDL 權限。REQUIRE SSL,防止明文密碼竊聽。ALTER USER ... PASSWORD EXPIRE 強制過期。audit_log 記錄所有登入與 DDL/DML 操作。| 錯誤現象 | 原因 | 解決 |
|---|---|---|
| ERROR 1130 (HY000): Host 'x.x.x.x' is not allowed to connect | 用戶 host 不匹配 | 檢查 SELECT user, host FROM mysql.user;,補授權或修改 host |
| ERROR 1045 (28000): Access denied for user 'u'@'h' (using password: YES) | 密碼錯誤/插件不匹配 | 確認密碼、檢查 authentication_plugin(MySQL 8.0 預設 caching_sha2_password) |
| ERROR 1227 (42000): Access denied; you need SUPER privilege(s) | 執行用戶缺少 GRANT OPTION | 使用 root 或具備 SUPER/GRANT OPTION 的賬號操作 |
MySQL 遠程授權的核心是 GRANT ... TO 'user'@'host',host 決定訪問來源,db.tbl 決定訪問範圍。摒棄「改表法」,採用標準授權法 + FLUSH PRIVILEGES,並落地網絡隔離、強密碼、最小權限、SSL 加密、審計日誌五大安全措施,才能構建既便捷又安全的遠程訪問體系。