Files
cma-management/docs/nexa-permission-autonomy-plan-20260828.md
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

8.7 KiB
Raw Permalink Blame History

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衔接:自动修复后必须验证

五、验收标准(铁律七)

  • 权限分级清单产出(本文档第二节)
  • L4操作确认拦截(实测:尝试DROP→被拒)— Hermes终端层pending_approval + approval-gate CRITICALDROP/DELETE
  • consistency-check升级(自动巡检+分级响应)— σ分级/定位/审计,实跑103项正常
  • 自动修复跑通(低风险项自动修+记录)— entity-graph重建+SQL建议+审计日志(dry-run与实跑均验证)
  • 高危项生成工单(不自动动)— 实测critical触发 autonomy-20260828-01.md 生成,含人工确认清单
  • pytest覆盖(分级+拦截+巡检)— 新增test_risk_levels.py 9项,全量627 passed无回归
  • 多租户隔离不受影响(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 实测