mysql中查看用户权限是数据库运维和权限管理中的常见操作,通过合适的查询方式可以快速确认用户的操作范围,保障数据库的安全稳定运行。

使用SHOW GRANTS命令查看用户权限
SHOW GRANTS是mysql内置的用于查看用户权限的快捷命令,使用起来非常简单,直接返回指定用户的授权语句,能够直观看到用户的权限内容。
基本语法如下:
-- 查看当前登录用户的权限 SHOW GRANTS; -- 查看指定用户的权限,需要指定用户名和主机 SHOW GRANTS FOR 'test_user'@'localhost';
执行上述语句后,会返回类似如下的结果:
GRANT SELECT, INSERT ON `test_db`.* TO 'test_user'@'localhost'
这个结果直接展示了用户test_user在localhost主机上,对test_db数据库拥有查询和插入的权限。如果要查看的用户不存在,执行命令会返回错误提示。
查询mysql系统表获取用户权限
mysql的用户权限信息存储在系统数据库mysql的多个系统表中,也可以通过查询这些表来获取更细粒度的权限信息。
常用的权限相关系统表
user表:存储全局级别的权限信息,记录用户是否能登录以及是否拥有全局操作权限db表:存储数据库级别的权限信息,记录用户对某个数据库的操作权限tables_priv表:存储表级别的权限信息,记录用户对某张表的操作权限columns_priv表:存储列级别的权限信息,记录用户对某张表特定列的操作权限
查询user表查看全局权限
通过查询mysql.user表,可以获取用户的全局权限字段,每个权限对应一个字段,值为Y表示拥有该权限,N表示没有。
-- 查询指定用户的全局权限
SELECT user, host,
Select_priv, Insert_priv, Update_priv, Delete_priv,
Create_priv, Drop_priv, Grant_priv
FROM mysql.user
WHERE user = 'test_user' AND host = 'localhost';
执行后返回的结果中,各个权限字段的值会明确展示用户是否拥有对应的全局权限。
查询db表查看数据库级权限
如果需要查看用户对某个具体数据库的操作权限,可以查询mysql.db表:
-- 查询用户对指定数据库的权限
SELECT user, host, db,
Select_priv, Insert_priv, Update_priv, Delete_priv
FROM mysql.db
WHERE user = 'test_user' AND host = 'localhost' AND db = 'test_db';
通过information_schema库查询权限
除了mysql系统库,还可以通过information_schema库中的USER_PRIVILEGES、SCHEMA_PRIVILEGES等表来查询用户权限,这些表的信息更规范,适合需要批量查询或者做权限统计的场景。
-- 查询所有用户的全局权限 SELECT * FROM information_schema.USER_PRIVILEGES; -- 查询指定用户的全局权限 SELECT * FROM information_schema.USER_PRIVILEGES WHERE GRANTEE LIKE "'test_user'@'localhost'";
GRANTEE字段的格式是'用户名'@'主机',所以查询的时候需要匹配对应的格式。
不同查询方式的适用场景
| 查询方式 | 适用场景 |
|---|---|
| SHOW GRANTS命令 | 快速查看单个用户的完整权限,需要直观看到授权语句的场景 |
| 查询mysql系统表 | 需要获取细粒度权限信息,或者需要自定义筛选权限字段的场景 |
| 查询information_schema库 | 需要批量查询用户权限,或者做权限统计、审计的场景 |
注意事项
- 查看用户权限需要有对应的权限,普通用户只能查看自己的权限,root用户或者拥有
GRANT OPTION权限的用户可以查看所有用户的权限 - 使用SHOW GRANTS命令时,如果用户的主机是
%,需要写成SHOW GRANTS FOR 'test_user'@'%',避免语法错误 - 系统表中的权限字段会随mysql版本略有差异,查询的时候可以先查看表结构确认字段名称
mysql用户权限权限查询GRANT语句information_schema修改时间:2026-07-11 21:12:23