Files
cma-management/docs/nexa-permission-autonomy-plan-20260828.md
T
Hermes CI Fix 1a6ea8afae chore: CI流程加固+Schema检查门禁
- deploy.sh: 提交纪律检查(本地未提交修改→中止) + 冒烟测试(健康/登录/KPI/BOT/Schema)
- .woodpecker: 加前端typecheck+后端pytest测试步骤, backend-deploy加提交纪律检查
- 新增schema_check.py: ORM与数据库表结构一致性检查
- 修复budget_plans表缺3列(source_kpi_id/source_type/calc_logic)
- 附带入库: budget测试+文档
2026-08-28 07:18:54 +08:00

157 lines
8.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Nexa权限L1-L4分级 + 数据库自治升级 — 方案(P2安全增强)
- 任务: pending-tasks/yanxue-nexa-permission-autonomy.md
- 提出: yanxueBot 2026-08-28 | 执行: wecom-project(协调/验收)→ wecom-fullstack(开发)
- 借鉴: TDSQL Nexa/DatabaseClawCatalog权限分级 + DatabaseClaw数据库自治)
## 一、现状盘点(2026-08-28 摸底)
| 已有能力 | 位置 | 现状 |
|---------|------|------|
| approval-gate | /usr/local/bin/approval-gateyanxue脚本) | shell命令级LOW/MEDIUM/HIGH/CRITICAL分级+熔断;CRITICAL含DROP TABLE |
| 一Bot一Key | bot_bridge.py verify_bot_keyX-BOT-KEY | Bot API鉴权;bot_bridge_v2用X-BRIDGE-TOKEN |
| entity_id多租户 | 全表entity_id + auth_middleware | 账套隔离(酣客=1/博海=2 |
| consistency-check | wecom-yanxue/scripts/consistency-check.py | 103项每日04:30,输出JSON报告(summary total_checks/passed/issues |
| verify-enforcer | profiles/*/plugins/verify-enforcer | 铁律七验证提醒插件 |
| Hermes终端安全 | approvals.deny Bash() | SQL DROP/TRUNCATE已被终端层拦截(实测pending_approval |
## 二、权限L1-L4分级清单(核心交付物)
### 分级定义
| 级别 | 含义 | 处理方式 |
|------|------|---------|
| L1 | 只读查询 | X-BOT-KEY验证后直接放行 |
| L2 | 业务写(单条,可追溯) | 放行 + 写前校验(entity归属/字段校验) |
| L3 | 批量写/创建(影响大) | 放行 + 限制批量 + source_batch审计 |
| L4 | 危险(DROP/TRUNCATE/批量DELETE/生产结构修改) | **不向Bot API开放** + 终端层拦截 + 人工审批 |
### API→级别→处理方式 清单
#### L1 只读(20项)
| API | 说明 | 处理 |
|-----|------|------|
| GET /api/cma/bot/ping | 心跳 | 放行 |
| GET /api/cma/bot/overview | 总览计数 | 放行 |
| GET /api/cma/bot/kpis | KPI列表 | 放行 |
| GET /api/cma/bot/kpis/{id}/history | KPI历史 | 放行 |
| GET /api/cma/bot/strategic-maps | 战略地图 | 放行 |
| GET /api/cma/bot/alerts | 预警列表 | 放行 |
| GET /api/cma/bot/budget/plans | 预算计划 | 放行 |
| GET /api/cma/bot/cost/standard | 标准成本 | 放行 |
| GET /api/cma/bot/cost/actual | 实际成本 | 放行 |
| GET /api/cma/bot/actions | 行动方案 | 放行 |
| GET /api/cma/bot/organization | 组织架构 | 放行 |
| GET /api/cma/bot/data-sources | 数据源 | 放行 |
| GET /api/cma/bot/users | 用户 | 放行 |
| GET /api/cma/bot/query | 统一查询 | 放行 |
| GET /api/cma/bot/okr/list | OKR列表 | 放行 |
| GET /api/cma/bot/nlp | 自然语言查询 | 放行 |
| GET /api/cma/bot/iron-law | 铁律KPI看板 | 放行 |
| GET /api/cma/bot/iron-law/bots | Bot排名 | 放行 |
| GET /api/cma/bot-bridge/verify/{id}/history | 验证历史 | 放行 |
| GET /api/cma/bot-kpis | Bot KPI管理列表 | 放行 |
#### L2 业务写(4项)
| API | 说明 | 处理 |
|-----|------|------|
| POST /api/cma/bot/kpi-value-with-check | 写KPI值+自动预警检查 | 放行+entity归属校验(已有) |
| POST /api/cma/bot-bridge/kpi-result | KPI计算结果回填 | 放行+归属校验 |
| POST /api/cma/bot-kpis/{kpi_id}/value | 写KPI值 | 放行+归属校验 |
| POST /api/cma/bot-bridge/verify/{id} | 验证ActionPlan回填 | 放行+rule校验 |
#### L3 批量写/创建(3项)
| API | 说明 | 处理 |
|-----|------|------|
| POST /api/cma/bot/import | Excel批量导入KPI值 | 放行+限制行数+source_batch |
| POST /api/cma/bot/kpis/create-with-links | 创建KPI+批量因果链 | 放行+治理校验(已有)+审计 |
| POST /api/cma/bot/bridge/mpm-result | MPM分析结果 | 放行+校验 |
#### L4 危险(0项开放 = 天然隔离 ✅)
| 操作 | 现状 | 拦截层 |
|------|------|--------|
| DROP TABLE | Bot API无此端点 | ①Hermes终端approvals ②approval-gate CRITICAL |
| TRUNCATE | Bot API无此端点 | 同上 |
| 批量DELETE | Bot API无批量删除端点 | 同上 |
| ALTER生产表 | Bot API无此能力 | 同上 |
| 生产环境修改 | 仅systemd/运维通道 | approval-gate HIGH/CRITICAL |
**L4结论**Bot API面不存在任何DDL/DML危险端点——Bot只能通过白名单API读写,结构变更物理不可能。实测:尝试DROP被Hermes终端层拦截(pending_approval+ approval-gate CRITICAL。
**⚠️ 2026-08-28 实测发现approval-gate分级漏洞**python直接调assess_risk):
| 命令 | approval-gate判定 | 应判定 |
|------|------------------|--------|
| DROP TABLE kpi_values | CRITICAL 拦截 ✅ | CRITICAL |
| DELETE FROM kpi_values WHERE 1=1 | CRITICAL 拦截 ✅ | CRITICAL |
| TRUNCATE TABLE budget_plans | MEDIUM 放行 ❌ | CRITICAL(生产破坏) |
| ALTER TABLE kpi_values ADD COLUMN | MEDIUM 放行 ❌ | HIGH/CRITICAL(生产结构修改) |
| rm -rf /var/www/html | HIGH 拦截 ✅ | HIGH |
→ 修复项:approval-gate CRITICAL_RISK_PATTERNS 需补 TRUNCATE/ALTER(列入待修,代码修改归全栈Bot)。
### 与approval-gate衔接
- API层L1-L3 → 走Bot APIX-BOT-KEY),低危直通
- 任何涉及shell/DB结构的操作 → approval-gate check(高危拦截+人工确认)
- L4在API面不存在,在shell面被双层拦截
## 三、数据库自治升级设计(借鉴DatabaseClaw
### consistency-check升级:报告 → 自动巡检
现有脚本已输出103项JSON报告。升级为:
```
巡检运行(每日04:30
① 异常分级响应(σ分级)
├─ 1σ(info/low): 记日志,不推送
├─ 2σ(medium/high: 告警推送(cron已有[非SILENT]推送机制)
└─ 3σ(critical): 自动行动(低风险自动修 / 高危生成工单)
② 异常定位:每个issue带 type + detail + 表名(如涉及)+ SQL(如可定位)
③ 自动修复(仅低风险项)
├─ entity-graph自动重建(已有)
├─ 索引/统计信息类 → 生成修复SQL,dry-run确认后执行(记录审计)
└─ 可自动修范围白名单(禁止修复数据值/结构)
④ 高危项 → 生成工单(pending-tasks/ 新任务文件,人工确认)
⑤ 审计:audit log(谁修的/改了什么/何时/验证结果)
```
### 实现位置
- 主脚本: wecom-yanxue/scripts/consistency-check.py(升级σ分级+审计)
- 新增: wecom-yanxue/scripts/consistency-autonomy.py(自动修复+工单生成,与巡检解耦)
- 审计文件: /root/WB_WS/_wisdom/consistency/autonomy-audit.log
- 工单目录: 各profile pending-tasks/(高危自动写任务文件)
### 关键约束
- 自治≠无限授权:自动修只限白名单低风险(关系图重建/索引统计信息建议),数据值/表结构一律人工
- 修复动作必须留审计痕迹(铁律七:不验证=没做)
- 多租户隔离:巡检SQL一律带entity_id条件,不跨账套
## 四、行为护栏(自治边界)
1. Bot对CMA写入边界 = L1-L3白名单API(表只读面宽、写面窄:kpi_values/objectives/action_plans/kpi_alerts等业务写)
2. 危险操作列表(DROP/TRUNCATE/ALTER/批量DELETE)→ 双层拦截(Hermes approvals + approval-gate
3. 与approval-gate衔接:shell危险操作必须check;与verify-enforcer衔接:自动修复后必须验证
## 五、验收标准(铁律七)
- [x] 权限分级清单产出(本文档第二节)
- [x] L4操作确认拦截(实测:尝试DROP→被拒)— Hermes终端层pending_approval + approval-gate CRITICALDROP/DELETE)✅
- [x] consistency-check升级(自动巡检+分级响应)— σ分级/定位/审计,实跑103项正常
- [x] 自动修复跑通(低风险项自动修+记录)— entity-graph重建+SQL建议+审计日志(dry-run与实跑均验证)
- [x] 高危项生成工单(不自动动)— 实测critical触发 autonomy-20260828-01.md 生成,含人工确认清单
- [x] pytest覆盖(分级+拦截+巡检)— 新增test_risk_levels.py 9项,全量627 passed无回归
- [x] 多租户隔离不受影响(entity_id)— 分级/审计不破坏隔离;autonomy对CMA表缺entity_id条件时拦截(suggestion_blocked实测)
**附加修复(验收中发现)**approval-gate CRITICAL_RISK_PATTERNS 补 TRUNCATE/ALTER(原判MEDIUM放行)→ 实测现全部CRITICAL拦截,DROP/DELETE不回归。
## 六、开发分工(2026-08-27用户铁律:项目Bot只做方案/验收,代码修改归全栈Bot)
| 任务 | 执行 | 验收 |
|------|------|------|
| A. CMA后端Bot API分级标注+审计(risk_level字段/日志) | wecom-fullstack ✅ commit 758f820 | wecom-project ✅ |
| B. consistency-check升级(σ分级+自动修复+工单+审计) | wecom-fullstack ✅ | wecom-project ✅ |
| C. pytest覆盖(分级+拦截+巡检) | wecom-fullstack ✅ 627 passed | wecom-project ✅ |
| D. approval-gate TRUNCATE/ALTER拦截补丁 | wecom-fullstack ✅ | wecom-project ✅ 实测 |