From e45fbf3586ea0c62e7f40f10b9610e95c420f1b4 Mon Sep 17 00:00:00 2001 From: logan Date: Fri, 22 May 2026 13:11:12 +0800 Subject: [PATCH] docs: update PROJECT_EVALUATION/TDD_PLAN/ROADMAP for Phase 3 - Score: 6.2 -> 7.6 (+1.4) - Security: 5 -> 8 (+3.0, biggest jump) - Tests: 44 -> 85 (41 new) - Next: Phase 4 (SQL AST, rule CRUD, Alembic) --- PROJECT_EVALUATION.md | 141 ++++++++++++++++++++++-------------------- ROADMAP.md | 33 +++++++++- TDD_PLAN.md | 67 ++++++++++---------- 3 files changed, 142 insertions(+), 99 deletions(-) diff --git a/PROJECT_EVALUATION.md b/PROJECT_EVALUATION.md index 059a22a..9f37cae 100644 --- a/PROJECT_EVALUATION.md +++ b/PROJECT_EVALUATION.md @@ -1,7 +1,7 @@ # Web-Lite 数据审核平台 - 项目评估 > 评估日期: 2025-05-22 -> 评估版本: v0.2.0 (Phase 1+2 已完成) +> 评估版本: v0.3.0 (Phase 1+2+3 已完成) --- @@ -14,38 +14,49 @@ | 路径 | ~/devops/sql-platform | | 前端 | React 19 + TS + Vite 7 + Tailwind + shadcn/ui | | 后端 | FastAPI + SQLAlchemy 2 async + SQLite | -|| 状态 | **前后端已打通** — 44 测试通过,所有核心页面已对接真实 API | +| 状态 | **Phase 3 完成** — 85 测试通过,AES 加密 + SQL 审核引擎 + 审计日志 | --- ## 二、功能完成度 -### 后端 API (完成度: 60%) +### 后端 API (完成度: 75%) | 模块 | 端点数 | 状态 | 说明 | |------|--------|------|------| | 认证 auth | 3 | ✅ 完成 | login/me/logout,JWT+bcrypt | | 用户 users | 5 | ✅ 完成 | CRUD,admin 权限控制 | -| 数据源 instances | 7 | ✅ 完成 | CRUD+测试连接+列库+列表 | -| 工单 tickets | 6 | ✅ 完成 | 列表+创建+详情+审核+执行+统计 | -| 查询 query | 1 | ✅ 完成 | 仅 MySQL,SQL 注入防护(关键词级) | +| 数据源 instances | 7 | ✅ 完成 | CRUD+测试连接+列库+列表,**密码 AES 加密** | +| 工单 tickets | 6 | ✅ 完成 | 列表+创建+详情+审核+执行+统计,**自动 SQL 审核** | +| 查询 query | 1 | ✅ 完成 | MySQL 查询,SQL 关键词防护 | | 仪表盘 dashboard | 1 | ✅ 完成 | 统计聚合 | -| **审核规则** | 0 | ❌ 缺失 | 无后端 API | -| **工作流** | 0 | ❌ 缺失 | 无后端 API | -| **数据权限** | 0 | ❌ 缺失 | 无后端 API | -| **公告管理** | 0 | ❌ 缺失 | 无后端 API | -| **自动任务** | 0 | ❌ 缺失 | 无后端 API | +| **审计日志 audit** | 1 | ✅ **新增** | GET /audit/logs,分页+过滤 | +| 审核规则管理 | 0 | ❌ 缺失 | 无后端 API(审核引擎是内置的) | +| 工作流 | 0 | ❌ 缺失 | 无后端 API | +| 数据权限 | 0 | ❌ 缺失 | 无后端 API | +| 公告管理 | 0 | ❌ 缺失 | 无后端 API | +| 自动任务 | 0 | ❌ 缺失 | 无后端 API | -### 前端页面 (完成度: 65%) +### 核心引擎 (完成度: 70%) -|| 页面 | 路由 | 状态 | 数据来源 | -||------|------|------|----------| -|| 登录 | /login | ✅ 完成 | 真实 API | -|| 仪表盘 | /dashboard | ✅ 完成 | 真实 API | -|| 工单管理 | /tickets | ✅ 完成 | 真实 API | -|| 查询审计 | /queries | ✅ 完成 | 真实 API | -|| 数据源管理 | /mysql, /postgres, /redis, /mongo | ✅ 完成 | 真实 API | -|| 用户管理 | /users | ✅ 完成 | 真实 API | +| 引擎 | 状态 | 说明 | +|------|------|------| +| SQL 审核引擎 | ✅ 完成 | 10 条内置规则(WHERE检查、DROP拦截、生产加固等) | +| 密码加密引擎 | ✅ 完成 | AES-256-GCM,向后兼容明文 | +| 审计日志引擎 | ✅ 完成 | 全操作覆盖(instance/user/ticket/query) | +| 工单流引擎 | ✅ 完成 | pending→approved→executing→success/failed | + +### 前端页面 (完成度: 70%) + +| 页面 | 路由 | 状态 | 数据来源 | +|------|------|------|----------| +| 登录 | /login | ✅ 完成 | 真实 API | +| 仪表盘 | /dashboard | ✅ 完成 | 真实 API | +| 工单管理 | /tickets | ✅ 完成 | 真实 API | +| 查询审计 | /queries | ✅ 完成 | 真实 API | +| 数据源管理 | /mysql, /postgres, /redis, /mongo | ✅ 完成 | 真实 API | +| 用户管理 | /users | ✅ 完成 | 真实 API | +| **审计日志** | /audit-logs | ✅ **新增** | 真实 API | | 角色管理 | /roles | 🔶 UI 骨架 | mock | | 数据权限 | /data-permission | 🔶 UI 骨架 | mock | | 审核规则 | /audit-rules | 🔶 UI 骨架 | mock | @@ -54,18 +65,6 @@ | 公告管理 | /announcement | 🔶 UI 骨架 | mock | | 平台配置 | /config-platform | 🔶 UI 骨架 | mock | -### API 层 (完成度: 70%) - -| 文件 | 状态 | 说明 | -|------|------|------| -| api/request.ts | ✅ 完成 | axios 封装 + token 拦截 | -| api/auth.ts | ✅ 完成 | login/logout/me | -| api/user.ts | ✅ 完成 | CRUD | -| api/instance.ts | ✅ 完成 | CRUD+测试+列库+列表 | -| api/ticket.ts | ✅ 完成 | 列表+创建+审核+执行+统计 | -| api/query.ts | ✅ 完成 | 查询执行 | -| api/dashboard.ts | ✅ 完成 | 统计 | - --- ## 三、代码质量评估 @@ -74,22 +73,24 @@ 1. **架构清晰** — 后端分层 (models → schemas → services → endpoints),前端分层 (api → hooks → pages) 2. **现代技术栈** — FastAPI async、React 19、TypeScript 严格模式 -3. **安全基础到位** — JWT + bcrypt + 角色权限 + CORS + SQL 关键词过滤 +3. **安全体系完善** — JWT + bcrypt + AES-256-GCM + 角色权限 + CORS + SQL 审核引擎 4. **UI 统一美观** — shadcn/ui + dark/light 主题 + CSS 变量体系完善 -5. **API 层完整** — 前端 API 模块和后端端点一一对应 +5. **测试覆盖充分** — 85 个测试覆盖 9 个模块,TDD 驱动 +6. **SQL 审核引擎** — 10 条规则 + 评分系统 + 环境感知(production 更严格) +7. **审计日志完整** — 所有写操作(CRUD + 审核 + 执行 + 查询)均记录 -### ⚠️ 问题 +### ⚠️ 待改进 | # | 级别 | 问题 | 影响 | 建议 | |---|------|------|------|------| -|| 1 | ~~严重~~ ✅ | ~~前端全部使用 mock 数据~~ | ~~已全部替换为真实 API~~ | v0.2.0 已完成 | -|| 2 | ~~严重~~ ✅ | ~~Vite 无 proxy 配置~~ | ~~已配置 proxy~~ | v0.2.0 已完成 | -|| 3 | **严重** | Instance.password 明文存储 | 安全漏洞 | AES 加密存储 | -|| 4 | **高** | SQL 注入防护仅关键词匹配 | 绕过风险 | SQL AST 解析 | -|| 5 | ~~高~~ ✅ | ~~无测试代码~~ | ~~已有 44 个测试~~ | v0.2.0 已完成 | -|| 6 | ~~高~~ ✅ | ~~无 git commit~~ | ~~已有 2 个 commit~~ | v0.1.0 已完成 | -| 7 | **中** | 只支持 MySQL 查询 | 功能限制 | 按需扩展 PG | -| 8 | **中** | 前端 mock.ts 文件过大 | 维护困难 | 按模块拆分 | +| 1 | ~~严重~~ ✅ | ~~Instance.password 明文存储~~ | ~~已 AES-256-GCM 加密~~ | v0.3.0 已完成 | +| 2 | ~~高~~ ✅ | ~~无 SQL 审核引擎~~ | ~~10 条规则引擎已完成~~ | v0.3.0 已完成 | +| 3 | ~~高~~ ✅ | ~~无操作审计日志~~ | ~~全操作覆盖~~ | v0.3.0 已完成 | +| 4 | **高** | SQL 注入防护仅关键词匹配 | 绕过风险 | SQL AST 解析 (sqlparse) | +| 5 | **中** | 只支持 MySQL 查询 | 功能限制 | 按需扩展 PG | +| 6 | **中** | 审核规则硬编码 | 无法动态配置 | 规则 CRUD API | +| 7 | **中** | 前端 mock.ts 文件过大 | 维护困难 | 按模块拆分 | +| 8 | **中** | 无数据库迁移工具 | Schema 变更管理 | 引入 Alembic | | 9 | **低** | package.json name 为 "my-app" | 不专业 | 改为 sql-platform | | 10 | **低** | backend venv 提交到 git | 仓库膨胀 | .gitignore 排除 | @@ -98,35 +99,43 @@ ## 四、风险评估 | 风险 | 概率 | 影响 | 缓解措施 | -|------|------|------|---------| -| 前后端对接工作量被低估 | 高 | 高 | 逐页面替换 mock,优先核心页面 | -| SQL 审核引擎开发复杂 | 中 | 高 | 先做规则配置 CRUD,引擎迭代 | -| SQLite 并发瓶颈 | 低 | 中 | v0.2.0 支持 MySQL | -| 前端状态管理缺失 | 中 | 低 | 目前页面内 useState 够用,后续按需引入 | +|------|------|------|----------| +| SQL 关键词过滤被绕过 | 高 | 高 | 引入 sqlparse 做 AST 解析 | +| SQLite 并发瓶颈 | 低 | 中 | 后续支持 MySQL/PG | +| 审核规则无法动态配置 | 中 | 中 | Phase 4 实现规则管理 API | +| 前端状态管理缺失 | 低 | 低 | 目前 useState 够用 | --- ## 五、项目评分 -| 维度 | 评分(1-10) | 说明 | -|------|-----------|------| -| 架构设计 | **8** | 前后端分层清晰,RESTful API 规范 | -|| 代码质量 | **7** | 44 个测试保障,TypeScript 编译通过 | -|| 功能完成度 | **6** | 核心功能前后端已打通,缺审核引擎 | -|| 安全性 | **5** | 基础安全到位,密码明文存储是大问题 | -|| 可维护性 | **7** | 目录结构规范,命名清晰 | -|| UI/UX | **8** | 精致的双主题 UI,shadcn 组件运用好 | -|| 生产就绪度 | **4** | 真实 API、有测试,但缺部署配置 | -|| **综合** | **6.2** | 前后端已打通,核心功能可用 | +| 维度 | v0.2.0 | v0.3.0 | 变化 | 说明 | +|------|--------|--------|------|------| +| 架构设计 | 8 | **8.5** | +0.5 | 审核引擎+加密层+审计服务分层清晰 | +| 代码质量 | 7 | **8** | +1.0 | 85 测试(+41),9 个测试模块 | +| 功能完成度 | 6 | **7.5** | +1.5 | 加密+审核引擎+审计日志+前端审计页 | +| 安全性 | 5 | **8** | +3.0 | AES-256-GCM + SQL 审核引擎 + 审计追踪 | +| 可维护性 | 7 | **7.5** | +0.5 | 服务层独立(crypto/audit_engine/audit_log) | +| UI/UX | 8 | **8** | - | 新增审计日志页面 | +| 生产就绪度 | 4 | **5.5** | +1.5 | 密码加密+审核引擎+审计日志,但缺部署配置 | +| **综合** | **6.2** | **7.6** | **+1.4** | 安全性和功能完成度大幅提升 | --- -## 六、下一步行动 (Top 5) +## 六、下一步行动 (优先级排序) -1. ~~🔴 初始化 git~~ ✅ 已完成 -2. ~~🔴 Vite proxy~~ ✅ 已完成 -3. ~~🔴 Dashboard 对接 API~~ ✅ 已完成 -4. ~~🔴 编写测试~~ ✅ 44 个测试通过 -5. 🔴 **Instance 密码加密** — AES 加密存储 -6. 🔴 **SQL 审核引擎** — 基于 AST 的规则检查 -7. 🟡 **操作审计日志** — 关键操作记录 AuditLog +### Phase 4 — 核心功能补全 + +1. 🔴 **SQL AST 解析** — 用 sqlparse 替换关键词匹配,防注入更可靠 +2. 🔴 **审核规则管理 API** — 规则 CRUD + 启用/禁用 + 自定义规则 +3. 🟡 **Alembic 数据库迁移** — Schema 版本管理 +4. 🟡 **权限矩阵细化** — 数据源级权限、字段级脱敏 +5. 🟡 **多数据库支持** — PostgreSQL 查询+执行 + +### Phase 5 — 生产化 + +6. 🟡 **Docker 部署** — Dockerfile + docker-compose +7. 🟡 **邮件/飞书通知** — 工单状态变更推送 +8. 🟢 **慢查询日志** — 记录执行超过阈值的 SQL +9. 🟢 **数据库探针** — 实例健康监控 +10. 🟢 **数据导出** — 查询结果 CSV/Excel 导出 diff --git a/ROADMAP.md b/ROADMAP.md index a38f110..ce0816e 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -2,7 +2,7 @@ > 项目路径: ~/devops/sql-platform > 创建时间: 2025-05-22 -> 当前版本: v0.1.0-dev +> 当前版本: v0.3.0 --- @@ -19,7 +19,36 @@ ## 版本规划 -### v0.1.0 — 基础骨架 ✅ (当前) +### v0.3.0 — 安全加固 + SQL 审核引擎 ✅ + +- [x] **AES-256-GCM 密码加密** — 实例密码加密存储,向后兼容明文 +- [x] **SQL 审核规则引擎** — 10 条内置规则 + 评分系统 + - UPDATE/DELETE 无 WHERE → ERROR + - DROP TABLE / TRUNCATE → WARNING / ERROR (生产) + - ALTER TABLE (生产) → ERROR + - SELECT * → INFO + - 多语句 → ERROR + - 大 IN 子句 → WARNING + - JOIN 无 ON → WARNING + - LIKE '%...' → INFO +- [x] **自动审核集成** — 工单提交时自动 SQL 审核 + 评分 +- [x] **操作审计日志** — 全操作覆盖 (instance/user/ticket/query) +- [x] **审计日志 API** — GET /audit/logs (admin/dba) +- [x] **审计日志前端页** — /audit-logs 分页+过滤 +- [x] **85 个测试通过** — 44 (Phase 1) + 41 (Phase 3) + +### v0.2.0 — 前后端对接 ✅ + +- [x] Vite proxy 配置 (/api → localhost:9000) +- [x] Dashboard 对接真实 API +- [x] TicketsPage 全功能对接 (列表/创建/详情/审批/执行/统计) +- [x] InstancePage 对接 (CRUD+连接测试) +- [x] UsersPage 对接 (CRUD+新建弹窗) +- [x] QueriesPage 对接 (在线查询) +- [x] 前端 TypeScript 编译零错误 +- [x] 44 个后端测试全通过 + +### v0.1.0 — 基础骨架 ✅ **后端 API 已实现:** - [x] JWT 认证 (login/logout/me) diff --git a/TDD_PLAN.md b/TDD_PLAN.md index 48929c3..ba7b38e 100644 --- a/TDD_PLAN.md +++ b/TDD_PLAN.md @@ -145,38 +145,41 @@ npm install -D vitest @testing-library/react @testing-library/jest-dom jsdom > 先写测试,再写代码 -#### 3.1 Instance 密码加密 +#### 3.1 Instance 密码加密 ✅ 已完成 | # | TDD 步骤 | 状态 | |---|---------|------| -| 1 | 🔴 写测试:创建实例时密码加密存储 | ⬜ | -| 2 | 🔴 写测试:读取实例时密码解密返回 | ⬜ | -| 3 | 🟢 实现 AES 加密/解密工具 | ⬜ | -| 4 | 🟢 集成到 InstanceService | ⬜ | -| 5 | ✅ 测试通过 | ⬜ | +| 1 | 🔴 写测试:创建实例时密码加密存储 | ✅ test_crypto.py | +| 2 | 🔴 写测试:读取实例时密码解密返回 | ✅ test_crypto.py | +| 3 | 🟢 实现 AES-256-GCM 加密/解密工具 | ✅ app/core/crypto.py | +| 4 | 🟢 集成到 instance endpoint (create/update/decrypt) | ✅ | +| 5 | ✅ 9 个加密相关测试全部通过 | ✅ | -#### 3.2 SQL 审核规则引擎 +#### 3.2 SQL 审核规则引擎 ✅ 已完成 | # | TDD 步骤 | 状态 | |---|---------|------| -| 1 | 🔴 写测试:SELECT * 规则触发 warning | ⬜ | -| 2 | 🔴 写测试:无 WHERE 的 UPDATE/DELETE 规则触发 error | ⬜ | -| 3 | 🔴 写测试:LIMIT 缺失规则触发 info | ⬜ | -| 4 | 🔴 写测试:自定义规则 CRUD | ⬜ | -| 5 | 🟢 实现规则引擎 | ⬜ | -| 6 | 🟢 实现规则 API | ⬜ | -| 7 | ✅ 测试通过 | ⬜ | +| 1 | 🔴 写测试:SELECT * 规则触发 info | ✅ | +| 2 | 🔴 写测试:无 WHERE 的 UPDATE/DELETE 规则触发 error | ✅ | +| 3 | 🔴 写测试:DROP TABLE/TRUNCATE 规则 | ✅ | +| 4 | 🔴 写测试:生产环境额外规则(ALTER TABLE 等) | ✅ | +| 5 | 🟢 实现 10 条规则引擎 | ✅ app/services/audit_engine.py | +| 6 | 🟢 集成到工单创建流程(自动审核+评分) | ✅ | +| 7 | ✅ 23 个审核引擎测试全部通过 | ✅ | -#### 3.3 审核规则管理 API +#### 3.3 操作审计日志 ✅ 已完成 | # | 测试用例 | 状态 | |---|---------|------| -| 1 | 列出规则 | ⬜ | -| 2 | 创建规则 | ⬜ | -| 3 | 更新规则 | ⬜ | -| 4 | 删除规则 | ⬜ | -| 5 | 启用/禁用规则 | ⬜ | -| 6 | 按数据库类型筛选 | ⬜ | +| 1 | 审计日志列表 API (admin/dba) | ✅ | +| 2 | 审计日志列表 API (developer 禁止) | ✅ | +| 3 | 创建实例 → 审计日志 | ✅ | +| 4 | 创建用户 → 审计日志 | ✅ | +| 5 | 创建工单 → 审计日志(含审核评分) | ✅ | +| 6 | 审批工单 → 审计日志 | ✅ | +| 7 | 审计日志分页 | ✅ | +| 8 | 审计日志过滤 | ✅ | +| 9 | ✅ 9 个审计日志测试全部通过 | ✅ | --- @@ -198,14 +201,16 @@ npm install -D vitest @testing-library/react @testing-library/jest-dom jsdom ``` backend/ ├── tests/ -│ ├── conftest.py # fixtures: db, client, users, token -│ ├── test_auth.py # 认证测试 -│ ├── test_users.py # 用户管理测试 -│ ├── test_instances.py # 数据源测试 -│ ├── test_tickets.py # 工单测试 -│ ├── test_query.py # 查询测试 -│ ├── test_dashboard.py # 仪表盘测试 -│ └── test_security.py # 安全测试 +│ ├── conftest.py # fixtures: db, client, users, token, test_instance +│ ├── test_auth.py # 认证测试 (8) +│ ├── test_users.py # 用户管理测试 (8) +│ ├── test_instances.py # 数据源测试 (8) +│ ├── test_tickets.py # 工单测试 (11) +│ ├── test_query.py # 查询测试 (4) +│ ├── test_dashboard.py # 仪表盘测试 (2) +│ ├── test_crypto.py # 加密测试 (9) +│ ├── test_audit_engine.py # SQL审核引擎测试 (23) +│ └── test_audit_logs.py # 审计日志测试 (9) frontend/ ├── src/ @@ -235,5 +240,5 @@ frontend/ 1. ~~**立刻** — 创建 conftest.py + test_auth.py~~ ✅ 2. ~~**v0.2.0** — Phase 1 全部完成~~ ✅ 3. ~~**v0.2.1** — Phase 2 前后端对接~~ ✅ -4. **v0.3.0** — Phase 3 密码加密 + SQL 审核引擎 -5. **v0.4.0** — Phase 4 安全测试 +4. ~~**v0.3.0** — Phase 3 密码加密 + SQL 审核引擎~~ ✅ (85 tests) +5. **v0.4.0** — Phase 4 安全测试 + AST 解析