直接执行
就能看到当前用户权限
这是最简单、最可靠的方式——只要你连得上 MySQL,不需要任何额外权限就能立刻看到自己被授予了什么。
输出的是可执行的授权语句,比如
,一目了然,不用再拼接或推理。
等价写法还有
或
,效果完全一样
它不依赖你有没有
权限去查
表,也不怕字段名记错
注意:MySQL 8.0+ 启用角色(role)后,
默认不显示“通过角色继承来的权限”,只显示显式授予的权限——这点很容易漏看
查别人权限必须写全
想看其他用户的权限?光写用户名会报错:
。MySQL 把
和
当作两个完全不同的账号,缺一不可。
先确认目标用户的完整定义:
再执行:
(不是
,也不是
)
如果你没被授予
权限在
库,或者没有
,这条命令会被拒绝——不是语法错,是权限不足
查系统表才能看清“全局权限开关”和批量判断逻辑
看起来直观,但它的输出是“授权语句的汇总结果”,没法快速回答“这个用户能不能执行
?”这种问题。这时候得直奔底层字段。
MySQL(Linux)
MySQL 9.6.0是面向Linux平台的2026年创新版本,核心架构迎来重大革新。其将外键约束与级联操作从InnoDB引擎层上移至SQL层,确保所有数据变更均被完整记录至Binlog,彻底解决了CDC(变更数据捕获)与主从复制中的数据不一致难题。此外,该版本引入container_aware启动选项以原生适配容器环境,并对审计日志进行了组件化重构,为追求极致数据一致性与云原生体验的开发者提供了全新选择。
下载
全局权限(如
、
、
)存在
表里,对应字段是
、
、
,值为
或
数据库级权限(如
)查
;表级权限查
;列级权限查
手动改过系统表?记得执行
,否则变更不生效(用
语句则自动刷新)
权限查出来却发现“明明有 SELECT 却查不了表”?检查作用域和角色继承
常见现象:执行
显示
,但连
都报
。原因往往不在权限本身,而在作用域匹配或角色链断裂。
确认当前连接用的用户名和 host 是否与授权语句中的一致——比如你是用
连的,那必须有
或
的记录
MySQL 8.0+ 开启角色后,如果用户被赋予了角色(如
),但没激活(
),那些角色里的权限就不会生效
权限看起来像占位符,但它代表“零权限”——如果
只返回
,说明该用户目前实际没有任何操作权
查权限本身不难,难的是把
、系统表字段、角色状态、连接上下文这四层对齐——少看一层,就容易以为权限给了,其实没生效。
SHOW GRANTSSHOW GRANTSGRANT SELECT, INSERT ON `appdb`.* TO 'webuser'@'%'SHOW GRANTS FOR CURRENT_USERSHOW GRANTS FOR CURRENT_USER()SELECTmysql.userSHOW GRANTS'username'@'host'ERROR 1141 (42000): There is no such grant defined for user 'xxx' on host '%''user'@'localhost''user'@'%'SELECT User, Host FROM mysql.user WHERE User = 'api_user';SHOW GRANTS FOR 'api_user'@'%''api_user''api_user'@'localhost'SELECTmysqlGRANT OPTIONSHOW GRANTSDROP DATABASEDROPSUPERSHUTDOWNmysql.userDrop_privSuper_privShutdown_priv'Y''N'GRANT SELECT ON mydb.*mysql.dbmysql.tables_privmysql.columns_privFLUSH PRIVILEGESGRANTSHOW GRANTSGRANT SELECT ON `sales`.*USE sales;Access deniedmysql -u app -h 10.0.1.5'app'@'10.0.1.5''app'@'%'SET DEFAULT ROLE 'analyst' TO 'reporter'@'%'SET ROLE 'analyst'USAGESHOW GRANTSGRANT USAGE ON *.*SHOW GRANTS