user_name@host_spec'MySQL 用戶身份由「用戶名 + 來源主機」雙重標識,host_spec 支援多種匹配模式:
| 模式 | 範例 | 匹配範圍 | 備註 |
|---|---|---|---|
| 精確主機名 | localhost, db.example.com | 單一主機 | DNS 反向解析需正確 |
| IP 精確 | 192.168.1.100 | 單一 IPv4 | 支援 IPv6(需方括號) |
通配符 % | %, 192.168.% | 任意 / 前綴匹配 | % 等同 user@% |
| 域名後綴 | %.example.com | 該域名下所有主機 | 需 DNS 解析 |
| CIDR 網段 (3.23+) | 192.168.128.0/17 | 前 17 位固定的 IP 範圍 | 高效替代 192.168.% |
-- 僅允許本機 root 連線(最安全)
GRANT ALL ON mydb.* TO 'root'@'localhost' IDENTIFIED BY 'strong_pwd';
-- 允許內網 192.168.1.0/24 任意主機
GRANT SELECT, INSERT ON mydb.* TO 'app_user'@'192.168.1.0/24' IDENTIFIED BY 'pwd';
-- 開發人員從任意地點連線(僅開發庫,生產嚴禁)
GRANT ALL ON dev_db.* TO 'dev'@'%' IDENTIFIED BY 'dev_pwd';
-- 特定域名集群
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%.internal.corp' IDENTIFIED BY 'repl_pwd';
root@%:生產環境 root 僅允許 localhost 或跳板機 IP。DROP USER 'old_user'@'%';REQUIRE SSL 強制加密傳輸。validate_password 元件強制複雜度與輪換。SELECT User, Host FROM mysql.user;bind-address = 0.0.0.0(或具體 IP)。Access denied for user 'x'@'y' 中的 y 為實際來源 IP/主機名。skip-name-resolve 可禁用主機名解析,純用 IP 匹配。