跳转到主内容
新派编程网 - 新潮编程理念,全新技术课堂!

mysql如何查看当前用户权限列表_MySQL SHOW GRANTS命令解析

SHOW GRANTS 是查看当前用户权限最简单可靠的方式,输出可复用的授权语句;它默认基于 CURRENT_USER(),需配合 SELECT CURRENT_USER(), USER() 区分认证账号与连接声明;查他人权限须指定 'user'@'host' 并具备 SUPER 或 mysql.user 表 SELECT 权限;权限分全局、库、表、列四级存储于对应系统表,低层权限补足高层未授予部分但不覆盖显式拒绝。 直接执行
SHOW GRANTS
就能看到当前权限 这是最简单也最可靠的方式——只要你能成功登录 MySQL,哪怕没有
SELECT
权限查系统表,也能立刻看到自己实际拥有的全部权限语句。 它输出的是可直接复用的授权语句,比如:
GRANT SELECT, INSERT ON `appdb`.* TO 'webuser'@'%'
说明你对
appdb
库有读写权;如果只看到
GRANT USAGE ON *.* TO 'guest'@'localhost'
,那基本等于“没权限”。
SHOW GRANTS;
默认查的是
CURRENT_USER()
(即权限系统认定的那个账号),不是你登录时填的
USER()
想确认到底匹配了哪个账号?先运行
SELECT CURRENT_USER(), USER();
—— 前者是生效账号(如
'admin'@'%'
),后者是你声明的连接信息(如
'admin'@'192.168.5.22'
) MySQL 8.0+ 启用角色后,
SHOW GRANTS
不显示角色继承来的权限,得额外查
mysql.role_edges
表 查别人权限必须写全
'username'@'host'
,缺一不可 很多人卡在这步:执行
SHOW GRANTS FOR 'api_user';
报错
ERROR 1141 (42000): There is no such grant defined for user 'api_user' on host '%'
。原因就是没带
@'host'
。 MySQL 认证靠的是
user@host
这一对组合,单独用户名不唯一——同一个
api_user
可能在
'%'
、
'10.0.0.%'
、
'localhost'
上有完全不同的权限 不确定 host 是什么?先查:
SELECT User, Host FROM mysql.user WHERE User = 'api_user';
执行
SHOW GRANTS FOR
查他人权限,需要你有
SUPER
权限,或至少有
SELECT
权限访问
mysql.user
表,否则会被拒绝 权限到底存在哪?别只信
SHOW GRANTS
的输出 当你要批量判断某类权限是否启用(比如确认所有用户都禁用了
DROP
),光看
SHOW GRANTS
输出再解析字符串,既慢又容易漏——底层权限字段更直接。 MySQL(Linux) MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。 下载 全局权限存在
mysql.user
表里,看
Select_priv
、
Drop_priv
、
Create_priv
这些布尔字段 数据库级权限在
mysql.db
,表级在
mysql.tables_priv
,列级在
mysql.columns_priv
注意:
mysql.user
里查不到的权限(比如只给了某个库的
SELECT
),不代表没权限,只是不在全局表里 权限层级影响范围,不理解就容易误判“为什么没权限” MySQL 权限是分层叠加的:全局 > 数据库 > 表 > 列。低层级权限不会覆盖高层级的拒绝(DENY),但会补足高层级未授予的部分。 比如你在全局给了
SELECT
,又在
testdb
库显式
REVOKE SELECT
,那对该库就真没
SELECT
权了 但反过来:全局没给
CREATE
,只在
myapp
库给了
CREATE
,那你只能在
myapp
里建表 执行
SHOW GRANTS
会把各层权限合并列出,但不会告诉你哪条来自哪一层——要精确定位,还得结合
mysql.db
等表查 角色权限、host 匹配细节、权限表字段含义——这些点不翻源码也很难一次理清,但日常运维中只要记住:权限永远以
CURRENT_USER()
为准,
SHOW GRANTS
是起点,不是终点。

相关文章