在 MySQL 里,“用户”= 用户名 + 来源主机(host)。
所以 “给用户新增可登录的 host” 实际上就是 再建一个同名不同 host 的账号,或 修改已有账号的 host。下面给出 3 种常用做法,按场景自取。
- 查看现有账号的 host
SELECT user, host FROM mysql.user WHERE user='alice';常见结果示例
+-------+-----------+
| user | host |
+-------+-----------+
| alice | localhost |
+-------+-----------+目前 alice 只能从本机登录。
- 新增 host(推荐:再建一个同名账号)
想让她 既能本机登录,又能从 10.0.0.% 网段登录:
-- 1. 建新 host 的账号
CREATE USER 'alice'@'10.0.0.%' IDENTIFIED BY 'SameOrNewPass!';
-- 2. 把权限跟原来保持一致(假设原来有全库权限)
GRANT ALL PRIVILEGES ON *.* TO 'alice'@'10.0.0.%';
-- 3. 生效
FLUSH PRIVILEGES;现在就有两条记录:
+-------+------------+
| user | host |
+-------+------------+
| alice | localhost |
| alice | 10.0.0.% |
+-------+------------+- 修改 host(替换已有账号的来源)
如果 不再需要旧 host(例如把 localhost 换成 %),可直接改系统表:
RENAME USER 'alice'@'localhost' TO 'alice'@'%';
FLUSH PRIVILEGES;注意:
- 旧 host 立即失效,连接会断开。
- 权限保留,无需重新 GRANT。
- 模糊 host 写法速查
| host 值 | 含义 |
|---|---|
'localhost' | 仅本地 socket / TCP 回环 |
'127.0.0.1' | 仅回环地址 |
'192.168.%' | 192.168.0.0/16 网段 |
'%.example.com' | 域名后缀匹配 |
'%' | 任意主机(最开放) |
- 一键脚本示例
-- 允许用户 report 从 192.168.10.0/24 登录,只读业务库
CREATE USER 'report'@'192.168.10.%' IDENTIFIED BY 'Rpt#2025';
GRANT SELECT ON business.* TO 'report'@'192.168.10.%';
FLUSH PRIVILEGES;- 小贴士
- 创建账号时
IDENTIFIED BY可以跟现有密码一致,MySQL 会分别存储。 删除某个 host:
DROP USER 'alice'@'10.0.0.%';- 远程 host 首次连接失败,优先检查 防火墙 / bind-address / 密码插件。
就这么简单,一条 CREATE USER 或 RENAME USER 就能让 MySQL “认识”新的来源主机!