DBeaver GUI创建用户时host固定为'localhost'且不可修改,必须用SQL执行CREATE USER指定host(如'user'@'%'),再GRANT授权并FLUSH PRIVILEGES生效。

直接在 DBeaver 的 SQL 编辑器里执行 CREATE USER 语句即可,DBeaver 本身不提供图形化创建带 host 限定的账号入口——所有 host 约束(如 'user'@'192.168.1.100' 或 'user'@'%')都必须靠手写 SQL 完成。
为什么不能用 DBeaver 的「新建用户」向导指定 host
DBeaver 的 GUI 用户管理功能(右键连接 → Users → Create User)只支持填用户名和密码,host 字段被固定为 'localhost',无法修改。这是它的设计限制,不是你操作错了。
常见错误现象:
– 点击「Create User」后创建的账号始终是 'user'@'localhost',远程连不上;
– 手动改表 mysql.user 后没执行 FLUSH PRIVILEGES,权限不生效。
- 真正起作用的只有 SQL 语句,GUI 只是包装层
- host 是 MySQL 权限系统的核心维度,必须显式声明,不能留空或依赖默认值
- DBeaver 连接用的账号本身也得有对应 host 权限(比如你用
root@'192.168.1.50'连 DBeaver,那这个账号就得存在且能连)
CREATE USER 语句中 host 的写法与含义
host 不是可选参数,是语法必需项。写错格式或语义不符会导致账号不可用。
-
'user'@'localhost':仅本机 socket 或 127.0.0.1 连接可用 -
'user'@'192.168.1.%':匹配该网段所有 IPv4 地址(注意不是通配符 *) -
'user'@'%':允许任意主机(IPv4/IPv6),但不含localhost(MySQL 特殊规则) -
'user'@'::1':明确允许本地 IPv6 - 不要写
'user'@'*'—— 语法错误,%才是通配符
示例:CREATE USER 'app_rw'@'10.20.30.40' IDENTIFIED BY 'p@ssW0rd2026';
创建后必须显式授权并刷新权限
只执行 CREATE USER 不等于账号能干活,它甚至没有 USAGE 权限。授权和刷新缺一不可。
- 授权必须带上完全相同的
user@host格式:GRANT SELECT, INSERT ON mydb.* TO 'app_rw'@'10.20.30.40'; - MySQL 8.0+ 推荐用
CREATE USER ... WITH GRANT OPTION一步到位,但依然要GRANT具体库表权限 - 执行完
GRANT后,务必运行:FLUSH PRIVILEGES;(虽然多数情况自动触发,但显式调用最稳妥) - 验证是否生效:
SELECT user, host FROM mysql.user WHERE user = 'app_rw';
容易被忽略的兼容性细节
host 写法看似简单,但在跨版本、跨部署场景下极易踩坑:
- MySQL 8.0 默认启用
caching_sha2_password插件,老客户端(含某些 DBeaver 旧版驱动)可能认证失败 —— 建议创建时显式指定插件:CREATE USER 'u'@'%' IDENTIFIED WITH mysql_native_password BY 'pwd'; - DBeaver 连接池复用可能导致你刚创建的账号在「测试连接」时仍走旧会话缓存,建议新开 SQL 编辑器窗口再试
- 如果目标 MySQL 开启了
skip-name-resolve,就别用域名写 host(如'user'@'web1.example.com'),一律用 IP - 防火墙、云厂商安全组、SELinux 都可能拦截非
localhost的连接,host 正确 ≠ 网络可达
host 是账号身份的一部分,不是备注字段。写错一个字符,就是另一个账号。











