You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL使用CURRENT_USER()过滤mysql.user表返回空集问题求助

原因说明

current_user() 函数返回的是MySQL用于权限校验的完整身份字符串,格式为用户名@主机名,比如你用root从本地登录时返回值为root@localhost。而你筛选的mysql.user表的user字段仅存储纯用户名(也就是root),两边值格式不匹配,因此查询不到结果。

正确查询方案

方案1:拆分字段匹配(推荐,性能更优)

拆分current_user()的返回值,分别匹配user和host两个字段,避免同用户名不同主机的匹配错误:

SELECT * 
FROM mysql.user 
WHERE user = SUBSTRING_INDEX(CURRENT_USER(), '@', 1)
  AND host = SUBSTRING_INDEX(CURRENT_USER(), '@', -1);

方案2:拼接字段匹配

将mysql.user表的user和host字段拼接后和current_user()返回值直接匹配:

SELECT * 
FROM mysql.user 
WHERE CONCAT(user, '@', host) = CURRENT_USER();
补充说明

你可以先单独执行SELECT CURRENT_USER();查看当前身份的返回值,再执行SELECT user, host FROM mysql.user;查看系统表存储的身份格式,即可直观验证两者的差异。
另外注意不要混淆user()和current_user():user()返回的是当前连接的实际客户端地址(比如root@192.168.1.10),而current_user()返回的是MySQL权限校验时匹配到的身份,查询系统权限表时使用current_user()才是准确的。

内容的提问来源于stack exchange,提问作者Tom Kustermans

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:27:02