P3_WP03_ENTERPRISE_CONNECTORS.md 6.4 KB

P3-WP03 企业连接器与扩展契约交付说明

状态

ENGINEERING_COMPLETE_ENTERPRISE_SOURCE_UAT_BLOCKED

enterprise_confirmation_status 仍为 TBD_EXTERNAL。Oracle 与 SQL Server 是工程实现, 不是企业真实来源验收结果。当前缺少 enterprise_source_1enterprise_source_2、企业 网络、真实产品版本、只读账号与批准样本,因此不得声明企业 UAT 或生产就绪。

工程交付

  • 稳定公开入口 app.core.connectors,SDK v1.0 包含版本化 manifest、能力白名单、严格 配置 Schema、秘密引用、健康与兼容接口,以及 discover/snapshot/incremental/lineage/ profile/cancel/resume/evidence 统一协议。
  • registry 以 (connector_id, version) 精确注册,未知连接器、版本和未声明能力默认拒绝; 受控 REST Catalog 只调用公开注册入口,采集运行核心没有连接器名称分支。
  • runtime 以 connector/version/source/principal/domain/environment/process/binding/config/scope/ cursor/checkpoint/operation/dry-run 和 client hint 生成服务端规范请求哈希;调用方提供的 hint 不再直接 充当运行主键。相同 hint 跨身份或请求边界复用返回 409,且不返回另一运行记录。
  • execute/resume 合计最多五次 attempt。每次 attempt 具有随机 lease token,终态写入必须同时命中 running、attempt number、lease token 和未取消标志;迟到 worker 不能覆盖新 attempt。失败态重试和 取消态恢复只有 CAS 获胜者可调用 connector operation,竞争失败者不追加重复 attempt。
  • 取消在单条数据库 UPDATE 中原子写入 status=cancelled,cancel_requested=true,并通过 runtime probe、SQL 查询前后/逐行、REST 地址与流式 分块/逐页协作检查。它受驱动查询超时和网络读取超时约束,不承诺立即中断已进入驱动的阻塞调用。
  • Oracle 与 SQL Server 使用只读系统目录 SQL,支持 schema/table include/exclude scope; python-oracledbpyodbc 是可选驱动,缺失时返回稳定配置/驱动不可用错误,不影响启动。
  • REST Catalog 配置只能来自服务端批准的版本化 source binding;机器请求携带 config(即便猜中 环境 secret reference)也会在 transport 前拒绝。REST 强制 HTTPS、精确 host allowlist、一次 DNS 公共地址校验后直接连接固定 IP, 同时用原域名完成 TLS SNI 与证书 hostname 校验;禁重定向、连接/读取超时、64 KiB 流式读取、 2 MiB 响应上界和 Draft 2020-12 响应校验。默认缺少 secret resolver 时在 DNS/socket 前失败关闭; resolver 的秘密只进入 Authorization 请求头。默认 resolver 只允许 env:DATAOPS_CONNECTOR_* 命名空间;未配置后端的 vault:/secret: 稳定失败关闭。
  • Oracle、SQL Server、REST 的每个 connector principal 都严格绑定 connector/version/source/business-domain/environment 以及批准的 source binding 版本;操作和资源 scope 最小授权;binding 升版在同一事务内撤销旧版、创建新版并 rebind principal,binding 撤销同步停用 principal 和存量 active credential。凭证最长 15 分钟、仅返回一次、仅存 SHA-256;绑定、环境和 scope 在消费一次性凭证前校验,拒绝不会消耗凭证。
  • PostgreSQL 迁移 20260802_472 持久化 manifest、principal、credential metadata、run、attempt、 checkpoint、evidence、graph edge 与 audit;追加迁移 20260802_473 增加版本绑定、运行绑定、 安全配置/scope 与持久限流;后续 20260802_474 在多 active manifest 或 legacy binding 多版本 principal 时要求显式映射/合并并持续拒绝歧义 active 版本。20260802_475 增加批准 source binding、规范请求哈希/client hint、attempt lease 和持久取消标志;存在绑定或绑定运行时 降级会失败关闭。20260802_476 在升级时拒绝 active 未绑定 principal,并将所有企业连接器的 新建/更新 trigger 统一为 approved binding 强约束。473 在任何 ALTER/backfill 前执行歧义预检。
  • run claim 时立即建立 domain→source、source→run、process→run 控制关系;running、failed、 cancelled、resumable、succeeded 状态同步到关系边,成功结果再补 source/run→asset。
  • /api/datasource/graph 已由 501 替换为关系查询,管理 API 分为 connectors:readconnectors:operateconnectors:manage;人工运行入口只允许显式 dry_run=true,非 dry-run 只能通过一次性机器凭证入口。人工 cancel/resume 只能处理人工 dry-run;机器 cancel/resume 必须 提交新的短期凭证并按已持久化运行重新认证,不能用人工 bearer 或另一 binding/principal 越权。 cancel/resume 路由不读取请求体,OpenAPI 也不声明 requestBody。 人工 dry-run 的首次执行和 resume 都只做本地 validation,不调用 connector operation、秘密解析器 或网络/数据库;第三方 operation 只能返回 succeeded,最终 dry_run 状态由 runtime 设置。 Vue2 页面按精确 permission 控制动作且不展示秘密或短期 credential。
  • runtime 在持久化前分别清洗 records、cursor、checkpoint 和 evidence;限制分别为 10,000 条/ 1 MiB、32 KiB、256 KiB、32 KiB,并递归移除 secret key、Bearer、URL userinfo 与敏感查询参数。 列表 API 只返回 cursor/checkpoint 的哈希、项数与字节数摘要。
  • Oracle/SQL Server 当前只声明并实现已验证的 discover/snapshot/incremental/cancel/resume/evidence 能力,不虚报 lineage/profile。REST 逐页消费 next cursor,完成后持久化 completion marker,下一轮 从完整扫描起点开始;checkpoint 只保存 snapshot hash/count 摘要,不保存全量记录,也不伪造 removed 明细。分页仍受 100 页与 10,000 条总量上界约束。SQL Server 默认 Encrypt=yesTrustServerCertificate=no;环境来自 authenticated binding 而非 tls_options,伪造 development 被拒绝。 开发弱化仅允许 binding 中明确批准的策略,证书路径限制在批准目录内。

外部门禁

真实 UAT 需企业提供两个来源的厂商/版本、规模、批准 schema/table scope、只读账号、网络路径、 TLS/证书、游标语义、限流与失败恢复预期。应在同一版本和批准样本上重跑兼容、增量、幂等、 取消/恢复、凭据轮换、审计和容量验证,之后由企业数据源验收责任人签字。