35 lines
2.1 KiB
Markdown
35 lines
2.1 KiB
Markdown
# 工程需求
|
||
|
||
## 功能需求
|
||
|
||
- `schema:baseline` 不得调用本机 `mysql`、`mysqldump` 或其他外部数据库客户端。
|
||
- 根工作区直接声明并使用固定版本的 `mysql2`,不得从 Server 私有依赖路径加载。
|
||
- 工具只允许 development、`a_share_analysis_dev`、固定开发主机白名单、MySQL 5.7.x、`utf8mb4` 和 `utf8mb4_general_ci`。
|
||
- 使用 `SHOW CREATE` 导出基础表、视图、触发器、存储过程、函数和事件;索引与外键随表定义保存。
|
||
- 视图按库内依赖拓扑排序;循环依赖、未知依赖或对象丢失必须失败。
|
||
- format v3 清单记录导出器和驱动信息;format v1/v2 继续只读验证。
|
||
- 空库仍生成 `captured_empty`,MySQL 未启用仍生成 `not_applicable`,两者不得创建伪造 SQL。
|
||
- 版本目录继续使用临时目录、完整校验后原子重命名,既有目录只允许逐字节幂等复用。
|
||
|
||
## 安全需求
|
||
|
||
- 禁止查询业务表数据,禁止 DDL、DML、多语句、锁表和生产探测。
|
||
- 密码只能从被 Git 忽略的 development 配置读取,不进入异常、日志、清单、SQL 或命令参数。
|
||
- 顶层数据语句、连接串、疑似凭据、残留 `DEFINER` 和环境主机信息必须被拒绝。
|
||
- 对象名只能来自已验证的元数据,并使用 MySQL 标识符转义。
|
||
- 连接必须在所有成功和失败路径关闭。
|
||
|
||
## 性能与稳定性需求
|
||
|
||
- 使用单连接和有限并发,设置连接超时、查询超时、对象数量和响应大小保护。
|
||
- 中小型开发库目标在 30 秒内完成;超时不得保存部分基线。
|
||
- 导出前后读取对象摘要,两次不一致时失败,避免并发 DDL 形成混合快照。
|
||
- 相同输入必须生成确定性顺序、换行、清单和校验值。
|
||
|
||
## 兼容与测试需求
|
||
|
||
- 外部命令名称和参数保持不变。
|
||
- 现有 format v1/v2 夹具、状态和错误边界继续通过。
|
||
- 新增假连接单元测试,不以真实数据库作为普通测试门禁。
|
||
- 实施完成后只对固定开发库执行一次真实 `captured_empty` 或 `captured` 验证,禁止访问生产环境。
|