在 MySQL 里,“用户”= 用户名 + 来源主机(host)。
所以 “给用户新增可登录的 host” 实际上就是 再建一个同名不同 host 的账号,或 修改已有账号的 host。下面给出 3 种常用做法,按场景自取。


  1. 查看现有账号的 host

SELECT user, host FROM mysql.user WHERE user='alice';

常见结果示例

+-------+-----------+
| user  | host      |
+-------+-----------+
| alice | localhost |
+-------+-----------+

目前 alice 只能从本机登录。


  1. 新增 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.%   |
+-------+------------+

  1. 修改 host(替换已有账号的来源)

如果 不再需要旧 host(例如把 localhost 换成 %),可直接改系统表:

RENAME USER 'alice'@'localhost' TO 'alice'@'%';
FLUSH PRIVILEGES;

注意:

  • 旧 host 立即失效,连接会断开。
  • 权限保留,无需重新 GRANT。

  1. 模糊 host 写法速查

host 值含义
'localhost'仅本地 socket / TCP 回环
'127.0.0.1'仅回环地址
'192.168.%'192.168.0.0/16 网段
'%.example.com'域名后缀匹配
'%'任意主机(最开放)

  1. 一键脚本示例

-- 允许用户 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;

  1. 小贴士

  • 创建账号时 IDENTIFIED BY 可以跟现有密码一致,MySQL 会分别存储。
  • 删除某个 host:

    DROP USER 'alice'@'10.0.0.%';
  • 远程 host 首次连接失败,优先检查 防火墙 / bind-address / 密码插件

就这么简单,一条 CREATE USERRENAME USER 就能让 MySQL “认识”新的来源主机!

最后修改:2025 年 08 月 30 日
如果觉得我的文章对你有用,请随意赞赏