# DNS 多账户整改任务清单 ## 需求与边界(2026年10月4日) 依据《Scert整改合并优化清单》和《核心能力任务规格》P1-03,以及用户已确认的 DNS 账户归属要求执行;不是新增需求。范围仅 Linux 与 Web,第一台部署业务,第二台只验收证书推送。公共域名切换和邮件授权尚待确认,不阻断本项开发。 - 独立保存多个 DNS 账户,显示项目和用户归属,不把固定系统账户列表视为完成。 - 支持账户创建、验证、禁用、轮换和安全删除;凭据保存在现有秘密仓库,不在接口、日志或审计输出明文。 - 域名显式选择账户;签发、自动续期和重试使用同一绑定及实时权限,禁止跨项目使用。 - 兼容旧系统账户,处理域名、任务和旧凭据引用,不在迁移时擅自删除历史配置或密钥。 - 处理账户变更与签发并发,验证结果只能更新对应凭据版本;禁用不能被旧验证响应覆盖。 - 页面保持一页可用;覆盖 SQLite、MySQL、PostgreSQL 迁移、权限与竞态,再做第一台正式部署和实机验收。 ## 执行状态 - [✓] 需求与现有代码核对:当前只有配置文件中的单账户,没有独立账户表和域名账户绑定。 - [✓] 修改前检查点已提交推送:`26b8c3c`。保留未跟踪文件 `=`,不提交、不删除。 - [x] 账户基础模型和迁移二十七:独立账户元数据、归属、状态、秘密引用和版本号;三库初轮专项通过,等待最终回归复审。 - [x] 基础仓储:实时项目权限、事务审计、版本冲突、轮换后验证失效和禁止公开返回秘密引用;未提供无引用保护的删除方法。 - [✓] 三库迁移和仓储专项三轮竞态通过;MySQL 审计故障夹具权限已修正,失败记录保留。完整执行链仍待实现验证。 - [ ] 旧系统账户导入及幂等恢复,保护配置与历史凭据引用。 - [ ] 域名绑定、引用保护、安全删除,以及运行中任务的凭据租约和清理。 - [ ] 正式签发、续期、重试的账户解析与执行前权限复核。 - [x] 账户验证、增改、启停、轮换接口及无缓存和敏感字段隔离;本地全包与专项通过,第一台 Linux 回归待终态确认。 - [ ] DNS 账户页、域名配置页及前端回归。 - [ ] 第一台 Linux 全量、竞态、三库实测与正式产物升级。 - [ ] 公共域名真实浏览器和授权 DNS/公共 CA 验收。 ## 完成标准 只完成数据模型或管理接口不能关闭 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) - [x] `/api/v1/dns/accounts` 现在合并独立账户与旧系统账户;独立账户列表只读元数据、不解密凭据,显示真实归属用户,用户已删除时保留原标识并显示缺失状态。旧系统账户仍是兼容视图,未伪装成已完成导入。 - [x] 创建、读取、改名、启停、轮换、验证六条路由已接入真实数据库仓储;写操作检查同源、实时项目权限,创建不能冒领归属或伪造验证结果,修改携带版本号。读取、拒绝和错误响应均禁止缓存。 - [x] 首次验证使用独立的管理权限入口,只读取目标账户的实际凭据并调用现有 DNS 在线验证器;轮换、禁用或撤权后,旧验证结果不得覆盖新状态。不接受客户端自报成功、凭据引用或验证令牌。 - [x] 故障注入覆盖秘密写入/读取失败、服务商错误、验证取消、依赖缺失、审计失败回滚和敏感字段隔离。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 全量;本批不重复正式升级,不操作第二台,不把接口进展当作生产验收。