SELECT USER()返回客户端声明身份(如'dev01@localhost'),CURRENT_USER()返回服务器认证身份(如'dev01@%'),权限检查以后者为准。

直接在 SQL 编辑器里执行 SELECT USER(); 或 SELECT CURRENT_USER();,就能看到当前连接所用的数据库用户。这两个函数返回值不同,别混用。
SELECT USER() 和 SELECT CURRENT_USER() 的区别
这是最容易混淆的点:USER() 返回客户端声明的用户名和主机(比如 'dev01@localhost'),而 CURRENT_USER() 返回服务器实际认证通过的账号(比如 'dev01@%')。权限检查、默认数据库选择等都以 CURRENT_USER() 为准。
-
USER()受连接时指定的参数影响,可能被代理或跳转修改 -
CURRENT_USER()是服务器端最终确认的身份,不可伪造 - MySQL 8.0+ 中启用了角色(ROLE)后,
CURRENT_USER()不体现激活角色,需查ACTIVE_ROLES()
在 DBeaver 里快速执行并确认当前会话用户
DBeaver 不提供“当前用户”独立面板,但有几种可靠方式快速验证:
- 新建 SQL 编辑器标签页,输入
SELECT USER(), CURRENT_USER();后按Ctrl+Enter执行 - 右键已连接的数据库节点 → “SQL 编辑器” → 粘贴执行,避免误连错库
- 如果连接配置里用了 SSH 隧道或代理,
USER()显示的主机可能是跳板机地址,此时务必以CURRENT_USER()为准
连接成功后自动显示用户信息的位置
DBeaver 窗口底部状态栏会显示当前连接的基本信息,但默认不包含用户名。你可以手动启用:
- 菜单栏 → 窗口 → 首选项 → 用户界面 → 状态栏 → 勾选“显示连接信息”
- 刷新连接后,状态栏右侧会出现类似
mysql://localhost:3306/devdb (dev01@localhost)的提示 - 注意:这里显示的是连接配置中填的用户名,不是运行时认证结果,仍建议用
CURRENT_USER()最终确认
真正关键的不是“看到用户名”,而是确认这个用户是否拥有预期权限、是否走对了认证路径——尤其在使用代理用户、外部认证(PAM / LDAP)或 MySQL 8.0 的 caching_sha2_password 插件时,CURRENT_USER() 的输出常是唯一可信依据。

















