# Nexa权限L1-L4分级 + 数据库自治升级 — 方案（P2安全增强）

- 任务: pending-tasks/yanxue-nexa-permission-autonomy.md
- 提出: yanxueBot 2026-08-28 | 执行: wecom-project（协调/验收）→ wecom-fullstack（开发）
- 借鉴: TDSQL Nexa/DatabaseClaw（Catalog权限分级 + DatabaseClaw数据库自治）

## 一、现状盘点（2026-08-28 摸底）

| 已有能力 | 位置 | 现状 |
|---------|------|------|
| approval-gate | /usr/local/bin/approval-gate（yanxue脚本） | shell命令级LOW/MEDIUM/HIGH/CRITICAL分级+熔断；CRITICAL含DROP TABLE |
| 一Bot一Key | bot_bridge.py verify_bot_key（X-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 API（X-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 CRITICAL（DROP/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 ✅ 实测 |
