You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL 8.0.36中SHOW_ROUTINE权限存储在哪个系统表?

解决MySQL 8.0中SHOW_ROUTINE权限的存储位置问题

核心结论

在MySQL 8.0.36版本中,SHOW_ROUTINE全局权限存储在mysql.global_priv系统表的Privilege字段中,而非传统的mysql.user或mysql.procs_priv表。

具体查询方法

要找出拥有SHOW_ROUTINE权限的用户,直接查询mysql.global_priv表,解析JSON格式的权限字段即可:

SELECT 
    User, 
    Host,
    JSON_EXTRACT(Privilege, '$.Show_routine') AS has_show_routine
FROM mysql.global_priv
WHERE JSON_EXTRACT(Privilege, '$.Show_routine') = true;

或者更简洁的写法:

SELECT User, Host
FROM mysql.global_priv
WHERE Privilege->>'$.Show_routine' = 'true';

为什么不在mysql.user或procs_priv表?

  • MySQL 8.0重构了权限系统,原mysql.user表中的独立权限字段(如Show_routine_priv)被移除,所有全局权限统一以JSON格式存储在mysql.global_priv的Privilege字段中。
  • mysql.procs_priv表仅存储针对特定存储过程/函数的权限(如EXECUTE、ALTER ROUTINE等),而SHOW_ROUTINE是全局级权限,不会出现在这里。

验证权限的其他方式

除了直接查询系统表,也可以用SHOW GRANTS命令查看指定用户的权限:

SHOW GRANTS FOR 'username'@'host';

如果用户拥有全局SHOW_ROUTINE权限,输出结果会包含GRANT SHOW ROUTINE ON *.* TO 'username'@'host';

内容的提问来源于stack exchange,提问作者Aliman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 15:07:04