MySQL 8.0+ 中 SUPER 权限已被移除,需用 CONNECTION_ADMIN(推荐)或 PROCESS + SYSTEM_VARIABLES_ADMIN 替代,以安全执行 KILL 操作。

MySQL 8.0+ 中 SUPER 权限已被移除,不能靠它杀查询
MySQL 8.0 开始彻底删除了 SUPER 权限,旧配置里写 GRANT SUPER ON *.* TO 'u' 会直接报错:ERROR 3715 (HY000): The 'SUPER' privilege is obsolete and will be removed in a future release。这不是语法写错,是权限模型重构的结果——终止查询的能力现在拆得更细、更安全。
真正需要的是 CONNECTION_ADMIN(推荐)或 PROCESS + SYSTEM_VARIABLES_ADMIN
要让普通用户执行 KILL [CONNECTION | QUERY] ,核心权限不是“高权限兜底”,而是精准授予连接控制权:
-
CONNECTION_ADMIN:MySQL 8.0.14+ 引入,允许KILL任意连接(包括其他用户),且不依赖PROCESS; - 若版本 PROCESS(查看线程) +
SYSTEM_VARIABLES_ADMIN(MySQL 8.0.12+ 才能替代旧SUPER对KILL的隐式要求); -
PROCESS单独存在时,用户只能看到自己线程(SHOW PROCESSLIST结果被过滤),无法KILL别人; - 注意:即使有权限,也不能
KILL自身连接(会报ERROR 1095 (HY000): You are not owner of thread ...)。
KILL QUERY 和 KILL CONNECTION 的权限要求其实一样
很多人以为 KILL QUERY 更“轻量”所以权限更低,其实不是。两者都走同一套权限校验路径,都需要 CONNECTION_ADMIN 或等效组合。区别只在行为:
-
KILL QUERY:仅中断该连接当前正在执行的语句,连接本身保持打开; -
KILL CONNECTION:断开整个连接(等价于旧版KILL); - 如果用户只有
PROCESS没有CONNECTION_ADMIN,连KILL QUERY都会报ERROR 1227 (42000): Access denied; you need (at least one of) the CONNECTION_ADMIN privilege(s) for this operation。
最小化授权示例与常见误配
给监控账号 monitor@'%' 授予查和杀慢查询能力,最简且安全的做法:
GRANT PROCESS, CONNECTION_ADMIN ON *.* TO 'monitor'@'%';
容易踩的坑:
- 漏掉
CONNECTION_ADMIN,只给PROCESS→KILL必然失败; - 用
GRANT ALL PRIVILEGES代替细粒度授权 → 违反最小权限原则,且在 MySQL 8.0+ 可能隐式包含已废弃权限导致警告; - 对 MariaDB 用户混淆:MariaDB 仍保留
SUPER,但它的语义和 MySQL 不同,跨数据库迁移时权限不能直接复用; - 没刷新权限缓存:授完权后记得
FLUSH PRIVILEGES;,否则新权限不生效(虽然多数情况自动加载,但生产环境别赌)。
复杂点在于权限粒度变细后,不同 MySQL 小版本对组合权限的支持有差异,比如 SYSTEM_VARIABLES_ADMIN 在 8.0.12 前不存在,而 CONNECTION_ADMIN 要求至少 8.0.14 —— 查清自己版本再选方案,比硬套文档更重要。










