在MySQL数据库的日常管理中,查看所有用户的权限清单是常见需求,而mysql.user表作为存储用户账户和全局权限的核心系统表,是完成这个任务的关键入口。通过查询该表的字段,我们可以快速获取用户的账号信息、认证方式、各类全局权限状态等内容。

mysql.user表核心字段说明
mysql.user表包含大量字段,以下是最常用的几类核心字段说明:
| 字段分类 | 字段名 | 说明 |
|---|---|---|
| 用户标识字段 | Host,User | Host表示允许用户登录的客户端地址,User表示用户名称,两者共同构成用户的唯一标识 |
| 认证相关字段 | authentication_string | 存储用户的密码加密后的字符串,不同MySQL版本的密码字段可能有差异,8.0+版本统一使用这个字段 |
| 全局权限字段 | Select_priv,Insert_priv,Update_priv等 | 这类字段以_priv结尾,取值为Y或N,Y表示该用户拥有对应的全局权限,N表示没有 |
查询所有用户权限清单的基础方法
直接查询mysql.user表可以获取所有用户的权限信息,基础查询语句如下:
-- 查询所有用户的账号和全局权限字段
SELECT Host, User,
Select_priv, Insert_priv, Update_priv, Delete_priv,
Create_priv, Drop_priv, Grant_priv
FROM mysql.user;
如果需要查看所有字段的完整信息,可以使用以下语句:
-- 查询mysql.user表所有字段,建议按需选择,避免输出过多内容 SELECT * FROM mysql.user;
优化查询结果的实用技巧
默认查询结果中_priv字段显示为Y/N不够直观,我们可以通过CASE语句将其转换为更易读的内容:
SELECT
Host,
User,
CASE Select_priv WHEN 'Y' THEN '有' ELSE '无' END AS 查询权限,
CASE Insert_priv WHEN 'Y' THEN '有' ELSE '无' END AS 插入权限,
CASE Update_priv WHEN 'Y' THEN '有' ELSE '无' END AS 更新权限,
CASE Delete_priv WHEN 'Y' THEN '有' ELSE '无' END AS 删除权限,
CASE Grant_priv WHEN 'Y' THEN '有' ELSE '无' END AS 授权权限
FROM mysql.user;
其他补充的权限查询方式
除了查询mysql.user表,还可以使用MySQL内置的命令查看指定用户的权限:
-- 查看指定用户的权限,示例用户为testUser,允许从任意地址登录 SHOW GRANTS FOR 'testUser'@'%'; -- 查看当前登录用户的权限 SHOW GRANTS;
需要注意的是,mysql.user表存储的是全局权限,如果用户有数据库级、表级等其他层级的权限,需要查询mysql.db、mysql.tables_priv等对应的权限表才能获取完整信息。
注意事项
- 查询mysql.user表需要有对应的权限,通常需要使用root或者有mysql库查询权限的账户登录
- 修改mysql.user表的内容后,需要执行
FLUSH PRIVILEGES;命令才能生效 - 不同MySQL版本的mysql.user表字段可能存在差异,建议先通过
DESC mysql.user;语句查看当前版本的表结构
MySQL权限查询mysql_user表用户管理修改时间:2026-06-14 22:06:14