跳转到主内容
极星编程网:以代码为星,赴技术山海!

mysql如何查看用户已有权限_mysql show grants命令

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

相关文章