适配当前mes数据库账号(function_test)业务场景,分为权限详解、查看连接、kill语法、两种终止模式、权限区分、风险清单、账号方案选型、运维操作规范
一、process 权限完整说明
1. process权限作用
无 process:账号仅能查看自身账号发起的数据库线程/连接
function_test现状:看板连接监控列表只能展示function‑test自身的会话,root、其他业务账号会话不可见
拥有 process:查看mysql实例全部账号所有数据库会话,可读取会话当前正在运行的sql、执行耗时、客户端地址、会话状态
重要:process ≠ 杀死会话权限
- process:只负责查看全部线程
- mysql8.0+ 杀掉其他用户连接需要
connection_admin;5.7版本依赖 super 超级权限;普通账号只能kill自己发起的会话
2. process不会附带的权限
- 不会赋予表查询(select)、新增修改(insert/update)、删除、建表、用户管理、超级管理员权限,属于独立的会话查看权限
3. process安全隐患
- 能够窥视所有客户端实时执行sql,容易泄露业务敏感字段
- 配合
connection_admin权限后,可以随时中断任意业务会话、长时间事务、慢查询 - 业务账号一旦泄露密码,入侵者可以观测全部数据库会话行为
二、查看数据库会话(进程列表)两种方式
方式1:简易命令
show processlist;
方式2:精细化查询(适合看板监控读取)
select id, user, host, command, time, state, info from information_schema.processlist;
字段释义
- id:会话线程id,kill操作唯一标识
- user:登录数据库账号
- host:客户端ip
- command:sleep空闲 / query正在执行sql / connect连接中
- time:当前状态持续时长,单位秒
三、kill 完整语法、两种模式
-- 模式1:kill connection(简写直接 kill),断开整条数据库会话 kill 线程id; kill connection 线程id; -- 模式2:仅终止当前正在运行sql,保留tcp连接 kill query 线程id;
kill connection 和 kill‑query对比表
| 命令 | 执行效果 | 适用场景 |
|---|---|---|
| kill id | 终止当前sql、直接断开整条数据库连接;应用连接池连接失效,需要重连 | 会话卡死、长期sleep僵尸连接、异常死锁会话 |
| kill query id | 只打断正在执行的慢sql,tcp连接保留,客户端可以继续发起新请求 | 误执行耗时超大查询,不想断开程序长连接池会话 |
四、权限层级区分(重点区分查看权限 & 杀会话权限)
- 查看自己会话:任何登录账号自带,不需要额外权限
- 查看全量会话:grant process on *.* to '账号'@'%';
- 终止自己账号会话:默认权限,无需授权
- 终止其他账号会话:mysql8.0需要connection_admin,旧版需要super权限
-- 授予查看全部会话 grant process on *.* to 'function_test'@'%'; -- mysql8.0授予杀掉全部会话权限 grant connection_admin on *.* to 'function_test'@'%'; flush privileges;
五、kill操作风险清单(mes现场运维必看)
- 被终止会话中未提交事务会强制回滚,正在执行订单、维修登记等写入业务会直接失败
- 程序启用数据库连接池,kill connection之后旧连接失效,连接池抛出异常、需要自动重建连接
- 执行kill之后状态变为killed,mysql需要时间回滚事务、释放锁,不会立刻消失
- 禁止随意杀掉root运维会话、mes主业务长连接
六、适配当前项目3套账号权限方案对比
方案a(当下最简,推荐优先使用)
业务统一全部客户端使用function_test连接数据库
- 所有工控机、上位机共用同一个数据库账号
- 即便没有process权限,进程列表也能够看到全部现场设备连接
- 零授权改动、无安全风险,满足看板监控全部连接查看需求
方案b:业务账号追加process权限
不推荐
function_test业务账号获得查看所有账号sql的权限,权限面扩大,密码泄露风险升高
方案c(长期规范、权限分离,最优生产方案)
- 业务账号:
function_test仅持有业务最小权限select / insert / update、慢查询库查询权限,不分配process、connection_admin - 独立监控账号
mes_monitor
create user 'mes_monitor'@'%' identified by "自定义密码"; grant process,connection_admin on *.* to 'mes_monitor'@'%'; grant select on performance_schema.* to 'mes_monitor'@'%';
- 业务程序:function_test
- 数据库看板、连接监控、故障kill操作:单独使用monitor账号,做到业务、运维权限隔离
七、项目看板开发规范
- 监控页面只做只读查看,不开发网页端kill按钮
- 异常空闲会话、超时慢查询,运维人员登录mysql终端手动执行kill
- 优先
kill query终止慢sql;僵尸休眠连接再执行完整kill断开会话
八、账号权限总表‑function_test
| 系统功能 | 所需权限 | 当前账号权限状态 | 备注 |
|---|---|---|---|
| 业务数据查询导出 | select | ✅具备 | mes业务数据表 |
| 维修登记流转 | insert、update | ✅具备 | |
| 删除业务数据 | delete | ❌不需要,业务逻辑软删除 | |
| 慢查询top监控 | performance_schema.select | ✅具备 | |
| 连接数、内存指标 | 无需数据库权限,读取系统参数 | ✅可用 | |
| 查看自身账号连接 | 默认权限 | ✅可用 | |
| 查看全账号所有会话 | process | ❌无 |
如果你需要,我可以将这份知识点直接整理成 design_conn.md 正式文档格式。
到此这篇关于mysql中process权限的具体实现的文章就介绍到这了,更多相关mysql process权限内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
发表评论