Files
railwaysystem/qa-bootstrap/README.md
T

62 lines
4.3 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.
> Round 5V:本目录的全量初始化包仅为历史资料,本轮禁止重新执行。当前隔离启动入口是 `scripts/qa/qa.py`,运行账号为已存在的 `fusion_qa_app`;不据此新建账号或扩大权限。详见根目录 `DEMO_RUNBOOK.md`。
# RailwaySystem 融合测试数据库初始化包 (qa-bootstrap)
本目录为 **Round 3B-1 收口成果**,用于在全新空白 KingbaseES 数据库 `railwaysystem_fusion_qa_20261013` 中实现可重复、可审计、零破坏性、纯合成数据的闭环初始化。
---
## 一、核心原则与安全铁律
1. **零生产污染**:绝不恢复生产或共享库备份,所有主数据与业务数据 100% 为合成测试数据(Synthetic Data Only)。
2. **零破坏性 DDL**:在空库初始化中,废弃“先建旧表再 drop/alter”的历史迁移链,全量采用 V2 最终纯净 Schema,避免破坏性 DROP/TRUNCATE。
3. **严格白名单隔离**:执行工具硬编码限制唯一目标数据库:`railwaysystem_fusion_qa_20261013`。非白名单目标立即拒绝执行。
4. **命名空间与 Mapper 对齐**:培训业务表与若依系统表位于 `public` 模式;智能门锁 9 张核心业务表位于 `iotlocks` 模式;应用连接池统一注入 `search_path to public, iotlocks, pg_catalog, sys_catalog`。
5. **硬件验收边界诚实披露**:重新入住软件防竞态逻辑已闭环,但由于物理门锁通信缺乏硬件级凭证版本(Epoch),在途物理执行状态标记为 `HARDWARE_PENDING`,必须待现场硬件联调验收。
---
## 二、目录结构
```text
qa-bootstrap/
├── README.md # 本说明文档
├── manifest.md # 清单文件:文件顺序、来源追溯、依赖关系与 SHA-256
├── env.example # 环境变量模板 (包含三级账号与白名单配置)
├── application-fusion-qa.yml.example # Spring Boot 应用数据源与连接池推荐配置样例
├── scripts/
│ ├── run_bootstrap.sh # 安全执行脚本 (默认 --dry-run,强制白名单校验)
│ └── cleanup_guide.md # 仅文档说明:手动回滚与清理操作手册 (无自动执行)
└── sql/
├── 01_system_foundation.sql # 若依系统基础表与 Quartz 调度表 (public)
├── 02_training_v2_schema.sql # 培训业务 V2 完整物理表结构 (23 张表、补齐 person_no、约束与索引) (public)
├── 03_system_permissions_and_menus.sql # 培训业务专属角色、菜单与权限 (public)
├── 04_iotlocks_schema.sql # 智能门锁业务表 (iotlocks) 及门禁字典 (public) 修订版
├── 05_synthetic_demo_data.sql # 纯合成演示与测试数据 (学员/教师/宿舍/计划) (public)
├── 05b_fusion_iot_test_data.sql # 专属跨模式 IoT 门锁业务融合测试数据集 (入住/调宿/退宿/重新入住)
└── 06_verify_schema_integrity.sql # 完整性、字段断言 (person_no) 与跨表业务关联自动化校验断言脚本
```
---
## 三、三级数据库权限模型
| 角色级别 | 建议账号名 | 权限范围与职责 | 安全约束 |
| :--- | :--- | :--- | :--- |
| **建库管理员 (DBA)** | `kingbase` | 仅用于执行 `CREATE DATABASE railwaysystem_fusion_qa_20261013;` 并创建初始化角色 | 仅限 DBA 手动在受控会话中操作,脚本绝不硬编码 |
| **初始化专用账号** | `fusion_bootstrap_user` | 对该库拥有 `CONNECT`;对 `public` 和 `iotlocks` 拥有 `CREATE, USAGE` 及所有对象的 DDL/DML 权限 | 仅用于执行 `01` ~ `05b` 初始化脚本,初始化完成后可锁定或仅留归档 |
| **应用运行账号** | `fusion_qa_app` | 对该库拥有 `CONNECT`;对 `public` 和 `iotlocks` 拥有 `USAGE`;对所有表拥有 `SELECT, INSERT, UPDATE, DELETE`;对所有序列拥有 `USAGE, SELECT, UPDATE` | **严禁赋予 CREATEDB、SUPERUSER**;**禁止拥有 Schema 的 CREATE 权限**;禁止任何跨库访问 |
---
## 四、安全 Dry-Run 校验说明
在未连接真实数据库的情况下,可执行以下命令完成前置完整性自检:
```bash
./scripts/run_bootstrap.sh --dry-run
```
脚本将输出:
- 目标库白名单比对结果;
- 7 个 SQL 脚本的 SHA-256 校验与行数统计;
- 静态 SQL 扫描(确认绝无 `DROP DATABASE` 等未受控高危语句)。