62 lines
4.3 KiB
Markdown
62 lines
4.3 KiB
Markdown
> 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` 等未受控高危语句)。
|