grant super 直接失败是因为 mysql 8.0.16+ 已彻底移除 super 权限注册,执行必报 error 3715;必须按实际操作拆解为 connection_admin、system_variables_admin 等动态权限显式授予,且 all privileges 不含任何动态权限。

不能直接替代,必须按实际操作拆解授予对应动态权限;GRANT SUPER 会报 ERROR 3715,不是语法错,是权限模型已移除。
为什么 GRANT SUPER 会直接失败
MySQL 8.0.16+ 中 SUPER 已从权限系统彻底注销,执行 GRANT SUPER ON *.* TO 'u'@'h' 必然触发 ERROR 3715 (HY000): The 'SUPER' privilege is obsolete。这不是兼容性提示,而是底层不再识别该权限名。所有依赖 SUPER 的能力,都已被映射到独立的动态权限上,必须显式、分别授予。
常见管理动作对应哪些动态权限
别再凭经验猜,每个操作都有明确权限绑定:
Agent 记忆系统 — 五路融合检索 + 双时间线 + 因果链 + Spirit管家 + 记忆回声 + 弹性配置 + Circuit Breaker + GDPR合规 + 192项安全审计修复
-
KILL CONNECTION 123或KILL QUERY 123→ 必须有CONNECTION_ADMIN(仅PROCESS不够,它只能看自己线程) -
SET GLOBAL max_connections = 200→ 需SYSTEM_VARIABLES_ADMIN -
SET PERSIST_ONLY innodb_buffer_pool_size = 2G→ 需同时有SYSTEM_VARIABLES_ADMIN和PERSIST_RO_VARIABLES_ADMIN -
START REPLICA或CHANGE MASTER TO→ 需REPLICATION_SLAVE_ADMIN(REPLICATION CLIENT只能查状态,不能控制) -
FLUSH BINARY LOGS→ 需BINLOG_ADMIN -
BACKUP LOCK或调用mysqlbackup→ 需BACKUP_ADMIN
授予权限时最容易踩的三个坑
动态权限看着细,实操中一错就失效:
-
GRANT ALL PRIVILEGES ON *.*完全不包含任何动态权限——它只覆盖静态权限(如SELECT、INSERT),CONNECTION_ADMIN等必须单独GRANT - host 必须精确匹配:
'monitor'@'%'和'monitor'@'localhost'是两个完全独立的账号,权限不共享,漏掉任一 host 就可能 KILL 失败 -
SYSTEM_VARIABLES_ADMIN和SESSION_VARIABLES_ADMIN作用域不同:前者管SET GLOBAL,后者管SET SESSION;若只想限制用户改会话变量,授前者反而过度放权
验证权限是否真正生效
SHOW GRANTS FOR 'u'@'h' 默认不显示动态权限,容易误判已授权。正确验证方式只有两种:
- 查系统表:
SELECT * FROM mysql.global_grants WHERE USER = 'u' AND HOST = 'h' - 直接测试目标操作:比如执行
KILL CONNECTION 1,看是否报ERROR 1227 (42000): Access denied
注意:部分云数据库(如阿里云 RDS)会进一步屏蔽部分动态权限,即使本地授了也无效,需确认平台策略。










