Scert/doc/DNS多账户整改任务清单.md

8.2 KiB
Raw Blame History

DNS 多账户整改任务清单

需求与边界(2026年10月4日)

依据《Scert整改合并优化清单》和《核心能力任务规格》P1-03,以及用户已确认的 DNS 账户归属要求执行;不是新增需求。范围仅 Linux 与 Web,第一台部署业务,第二台只验收证书推送。公共域名切换和邮件授权尚待确认,不阻断本项开发。

  • 独立保存多个 DNS 账户,显示项目和用户归属,不把固定系统账户列表视为完成。
  • 支持账户创建、验证、禁用、轮换和安全删除;凭据保存在现有秘密仓库,不在接口、日志或审计输出明文。
  • 域名显式选择账户;签发、自动续期和重试使用同一绑定及实时权限,禁止跨项目使用。
  • 兼容旧系统账户,处理域名、任务和旧凭据引用,不在迁移时擅自删除历史配置或密钥。
  • 处理账户变更与签发并发,验证结果只能更新对应凭据版本;禁用不能被旧验证响应覆盖。
  • 页面保持一页可用;覆盖 SQLite、MySQL、PostgreSQL 迁移、权限与竞态,再做第一台正式部署和实机验收。

执行状态

  • [✓] 需求与现有代码核对:当前只有配置文件中的单账户,没有独立账户表和域名账户绑定。
  • [✓] 修改前检查点已提交推送:26b8c3c。保留未跟踪文件 =,不提交、不删除。
  • 账户基础模型和迁移二十七:独立账户元数据、归属、状态、秘密引用和版本号;三库初轮专项通过,等待最终回归复审。
  • 基础仓储:实时项目权限、事务审计、版本冲突、轮换后验证失效和禁止公开返回秘密引用;未提供无引用保护的删除方法。
  • [✓] 三库迁移和仓储专项三轮竞态通过;MySQL 审计故障夹具权限已修正,失败记录保留。完整执行链仍待实现验证。
  • 旧系统账户导入及幂等恢复,保护配置与历史凭据引用。
  • [~] 域名绑定及数据库引用保护已实现,等待第一台实库复审;安全删除、执行租约和凭据清理尚未完成。
  • 正式签发、续期、重试的账户解析与执行前权限复核。
  • 账户验证、增改、启停、轮换接口及无缓存和敏感字段隔离;本地全包与专项通过,第一台 Linux 回归待终态确认。
  • DNS 账户页、域名配置页及前端回归。
  • 第一台 Linux 全量、竞态、三库实测与正式产物升级。
  • 公共域名真实浏览器和授权 DNS/公共 CA 验收。

完成标准

2026年10月4日05:34 域名绑定增量

  • 迁移二十八新增域名与账户绑定;复合外键约束同项目,允许同一账户绑定多个域名。SQLite 外键关闭时仍有插入、更新、删除、替换保护;MySQL 按建表、索引、两个外键的中断边界校验并恢复,不覆盖冲突结构。
  • 绑定仓储要求实时证书管理与凭据使用权限,核对账户版本、启用及验证状态;解除要求证书管理权限。每次绑定生成新令牌,拒绝旧页面覆盖和解除后重绑的旧令牌复用。
  • 绑定、域名服务商元数据和成功审计同事务;排队、运行、等待重试及取消中的任务阻止变更。域名删除原子解除引用,不删除账户;普通编辑不能绕过绑定改变验证方式或服务商。
  • 域名读取返回账户与绑定标识。执行租约尚未接入,因此签发入口对独立绑定明确拒绝,不能静默使用系统凭据替代;尚未开放绑定接口和页面,不部署此过渡状态作为完整功能。
  • [✓] 本地数据库、仓储、证书、HTTP 四包全量通过;追加状态与错误分类用例后,仓储二十轮专项及四包 vet 通过。本地 MySQL/PostgreSQL 未配置而跳过的用例不计实库证据。
  • [!] 干净提交 1dc72f2 第一台全量任务 scert-dns-clean-20261004-0514.service 失败:SQLite 并发锁错误被已有账户更新入口包装成凭据重复错误。已按驱动主错误码及扩展码分类为版本冲突,保留非锁错误拒绝;未放宽原并发断言,待修复版本第一台复跑。
  • [~] 本轮先核验干净源码三库迁移、绑定仓储和 Linux 全量,再接旧账户导入、绑定接口、执行租约及签发续期链和前端。完整 P1-03 仍未完成。

只完成数据模型或管理接口不能关闭 P1-03。每阶段记录真实测试结果;外部服务未验证、跳过或仅隔离验证的项目维持未完成。CNAME 委派保留在总清单,不因本项账户开发自动关闭。

首轮验证记录(运行环境 UTC+8,2026年10月4日)

  • 本地首轮专项发现 SQLite 默认外键开关关闭时引用保护无效;补项目插入、更新、删除、更换标识及替换触发器,不全局修改用户连接参数。首批失败真实保留,不把原代码计为通过。
  • 本地领域、数据库和仓储包全量通过;本地未配置的 MySQL/PostgreSQL 实库用例跳过,不计实库证据。新增完整用例后三轮专项和 vet 通过。
  • 第一台首轮任务 scert-dns-accounts-20261004-0425.service 已 inactive、success、退出码零:三库迁移、账户仓储、MySQL 八种中断/冲突和 vet 通过。日志为 /var/tmp/scert-dns-accounts-20261004-0425/dns-accounts.log。
  • 增量竞态任务 scert-dns-accounts-race-20261004-0430.service 于 04:41 实查为 failed、退出码一;数据库三轮通过,185.274 秒,仓储 SQLite/PostgreSQL 通过,MySQL 三轮均在故障触发器创建时报 1419。修复仅将隔离库触发器注入改用测试管理连接,业务操作继续受限连接,不修改生产权限或全局信任参数。
  • [~] 本轮沿用已确认需求:先复核修复后的实库竞态,再接入域名账户绑定及引用保护,随后接续执行链和页面;数据层检查点 02e0399 已提交推送,完整功能仍未完成。
  • 当前 HTTP 路由、系统旧账户、域名签发配置和线上正式版本均未切换,生产数据及第二台未操作。

账户管理接口接入(运行环境 UTC+8,2026年10月4日05:04)

  • /api/v1/dns/accounts 现在合并独立账户与旧系统账户;独立账户列表只读元数据、不解密凭据,显示真实归属用户,用户已删除时保留原标识并显示缺失状态。旧系统账户仍是兼容视图,未伪装成已完成导入。
  • 创建、读取、改名、启停、轮换、验证六条路由已接入真实数据库仓储;写操作检查同源、实时项目权限,创建不能冒领归属或伪造验证结果,修改携带版本号。读取、拒绝和错误响应均禁止缓存。
  • 首次验证使用独立的管理权限入口,只读取目标账户的实际凭据并调用现有 DNS 在线验证器;轮换、禁用或撤权后,旧验证结果不得覆盖新状态。不接受客户端自报成功、凭据引用或验证令牌。
  • 故障注入覆盖秘密写入/读取失败、服务商错误、验证取消、依赖缺失、审计失败回滚和敏感字段隔离。HTTP 测试使用隔离数据库与注入验证器,不能计为真实云 DNS 成功。
  • [✓] 本地 HTTP、仓储、数据库、领域四包全量及 vet 通过;随后新增依赖错误用例后的三轮 HTTP/仓储专项及 vet 通过。本地缺少外部数据库时跳过的用例不计实库证据。
  • [✓] 05:09 实查第一台 scert-dns-accounts-api-20261004-0458.service 已 inactive、success、退出码零;三库与 HTTP 三轮竞态及 vet 通过。领域 1.023 秒、数据库 185.441 秒、仓储 49.344 秒、HTTP 40.278 秒;日志 /var/tmp/scert-dns-accounts-20261004-0425/dns-accounts-api-race.log。此前 0445 环境变量错误退出一,失败记录保留。本次为隔离覆盖树,未包含最后追加的依赖故障用例与领域标识生成器复用,须由后续干净源码回归补齐。
  • 旧系统账户导入、域名绑定、执行租约、引用回收和安全删除、签发/续期/重试、前端操作仍未完成。旧秘密及提交结果不确定时的新秘密暂时保留,不能在缺少引用保护时误删;这不是完整回收方案。
  • 完成当前实现复审后,提交干净源码并在第一台做 Linux 全量;本批不重复正式升级,不操作第二台,不把接口进展当作生产验收。