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

运行EXPLAIN或EXPLAIN ANALYZE需授予用户哪些权限?

授予用户运行EXPLAIN/EXPLAIN ANALYZE的必要权限配置

不存在单独的EXPLAIN或EXPLAIN ANALYZE专属权限,权限要求完全和你要解释的目标SQL绑定,两类语句的权限差异来自本身执行逻辑的区别:

  • 普通EXPLAIN:只生成执行计划,不会实际执行目标SQL,只需给用户授予目标SQL语句本身所需的全部操作权限即可
    比如要让用户执行EXPLAIN SELECT * FROM user_table,给用户授予user_table的SELECT权限就满足要求;如果要解释的是INSERT语句,就授予对应表的INSERT权限,以此类推。
  • EXPLAIN ANALYZE:会实际运行目标SQL,再返回带真实运行统计的执行计划,权限要求和直接执行对应目标SQL完全一致,除了目标SQL本身需要的库、表、列操作权限外,没有额外要求
    比如要执行EXPLAIN ANALYZE DELETE FROM log_table WHERE create_time < '2023-01-01',用户必须持有log_table的DELETE权限,否则会直接报权限错误。

注意:

  1. 部分极老旧的数据库版本(比如MySQL 5.1及更早)曾要求执行EXPLAIN需要全局PROCESS权限,这个限制在所有新版本中已经移除,不要额外授予不必要的全局权限,严格遵循最小权限原则即可
  2. 不要图方便给用户开全库或者全局级别的权限,仅开放其需要解释的SQL涉及到的对应资源的对应操作权限就够了

以MySQL 8.0为例,给用户app_query授予对业务库sales下sale_record表执行EXPLAIN SELECT、EXPLAIN ANALYZE SELECT/UPDATE的权限,直接运行如下授权语句即可:

-- 授予SELECT权限,满足EXPLAIN SELECT、EXPLAIN ANALYZE SELECT的权限要求
GRANT SELECT ON sales.sale_record TO 'app_query'@'192.168.1.%';
-- 授予UPDATE权限,满足EXPLAIN ANALYZE UPDATE的权限要求
GRANT UPDATE ON sales.sale_record TO 'app_query'@'192.168.1.%';
-- 刷新权限使配置生效
FLUSH PRIVILEGES;

PostgreSQL等其他主流关系型数据库的权限逻辑完全一致:没有单独的EXPLAIN类专属权限,仅需要匹配目标SQL本身的操作权限即可正常运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 16:57:23