Files
a-share-analysis/docs/features/GOV-012-node-schema-exporter/requirements.md

2.1 KiB
Raw Permalink Blame History

工程需求

功能需求

  • 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 验证,禁止访问生产环境。