SHOW GRANTS 是查看当前用户权限最快速可靠的方式,直接执行即可返回可读的授权语句;查他人权限须指定完整 ‘user’@’host’;系统表 mysql.user 仅存全局权限,多层权限需联合 mysql.db、mysql.tables_priv 等表及角色表综合判断。
直接执行 SHOW GRANTS 就能看到当前权限
这是最快速、最可靠的方式——只要能连上 MySQL,不需要额外权限就能查自己。登录后直接敲:
SHOW GRANTS;
立刻返回一串可执行的授权语句,比如 GRANT SELECT, INSERT ON `appdb`.* TO 'api'@'%',含义一目了然。
它不依赖你有没有 SELECT 权限去查 mysql 系统库,也不受表结构变更影响。等价写法还有 SHOW GRANTS FOR CURRENT_USER; 或 SHOW GRANTS FOR CURRENT_USER();,效果完全一样。
查别人权限必须写全 'user'@'host',漏掉 @'host' 会报错
想看其他用户的权限?不能只写用户名。例如 SHOW GRANTS FOR 'admin'; 会直接报错:ERROR 1141 (42000): There is no such grant defined for user 'admin' on host '%'。
常见错误场景包括:
- 误以为
'admin'和'admin'@'localhost'是同一个用户 - 记不清用户是用
'%'还是'192.168.1.%'创建的 - 用图形工具导出用户时没注意 Host 字段
正确做法是先确认:
SELECT User, Host FROM mysql.user WHERE User = 'admin';
再带完整主机名执行:SHOW GRANTS FOR 'admin'@'localhost';
从 mysql.user 表查全局权限更适合批量审计
当你需要判断“所有用户是否都禁用了 DROP”或“哪些账号开了 SUPER”,SHOW GRANTS 的文本解析就太麻烦了。这时候直接查系统表更稳:
SELECT User, Host, Drop_priv, Super_priv, Grant_priv FROM mysql.user;
Drop_priv 值为 'Y' 表示有删除库/表权限,'N' 表示没有。但注意: