connection_admin权限专用于执行kill connection和kill query操作,不附带其他能力;需全局授予(on .),配合flush privileges生效,且与admin_port无关。

CONNECTION_ADMIN权限能做什么
它只管一件事:允许用户执行 KILL CONNECTION 和 KILL QUERY,不附带任何其他能力。不是 SUPER 的简化版,而是功能明确的“杀线程专用权限”。
常见误用是以为给了 PROCESS 就能 KILL——其实 PROCESS 只让你看见线程,KILL 操作会报错 ERROR 1227 (42501): Access denied。
如何正确授予和验证
必须用全局粒度授予,且需配合 FLUSH PRIVILEGES 才生效:
GRANT PROCESS, CONNECTION_ADMIN ON *.* TO 'monitor'@'%';FLUSH PRIVILEGES;
验证是否生效:
- 用该用户登录后执行
SHOW GRANTS;,确认输出含CONNECTION_ADMIN - 执行
KILL CONNECTION 123;(ID 来自SHOW PROCESSLIST),不报错即成功 - 注意:若目标线程属于其他用户,
CONNECTION_ADMIN允许跨用户 KILL;但若只给PROCESS,则SHOW PROCESSLIST中只会显示自己的线程
为什么连不上或报Access denied
最常踩的坑不是权限没给,而是连接方式或账号匹配出错:
- 用户 host 不匹配:
'monitor'@'192.168.1.%'无法从10.0.0.5连入,必须显式授权对应 host - MySQL 8.0 默认启用密码认证插件
caching_sha2_password,旧客户端可能握手失败,加--default-auth=mysql_native_password测试 - 权限未刷新:某些低版本或特殊配置下,
GRANT后不执行FLUSH PRIVILEGES,新权限不会立即生效 - 连接被防火墙或网络策略拦截:确认目标端口(如 3306)对客户端 IP 开放
CONNECTION_ADMIN 和 admin_port 的关系
两者无关。admin_port 是独立监听端口,用于连接满时应急登录;而 CONNECTION_ADMIN 是普通端口上的操作权限。即使你配了 admin_address 和 admin_port,登录管理端口也仍需该权限才能执行 KILL。
真正容易被忽略的是:admin_port 登录后,你面对的仍是同一套权限体系——没有 CONNECTION_ADMIN,照样不能 KILL;有了它,也不代表能绕过普通端口的连接数限制。两者解决的是不同层面的问题:一个是“进得来”,一个是“做得了”。











