Files
orbit/docs/reports/credential-permissions-20261101.md

3.0 KiB
Raw Blame History

既有凭据权限管理回归

日期:2026-11-01。

功能范围

管理员通过控制台或 orbit-admin credential permissions 调整既有凭据的完整动作集合。SET_PERMISSIONS 使用 version=3 固定操作;旧动作仍使用原 v1/v2 格式,字段省略规则和历史摘要保持兼容。队列授权范围、Token 摘要及密文、有效期、旧代过渡期、资源 ID 均不改变。只更新动作集合与 revision,并将前后权限、主体、原因、固定回执同事务保存。

控制台入口仍只接受指定管理员会话与同源请求,业务 Bearer 不获得管理权限。页面使用精确动作勾选,默认保持原集合;高级核查、重试、审计与额度动作单独标识。未知动作、重复动作、通配符和空集合被拒绝;权限修改不能夹带有效期、过渡期或队列变化。

已执行验证

本批真库测试使用新建的一次性 MySQL 8.4 容器,核心与控制台测试各用独立数据库,没有对既有业务库执行故障注入。

验证 结果与边界
核心与历史凭据真库 race 新权限前原 Token 调度请求为 403,授予后可实际创建计划,收回后当前/旧代 Token 均被拒绝;额外队列仍不可访问
凭据保留 比对秘密摘要、密文、密钥编号、有效期、过渡截止、队列 JSON;只改变明确请求的动作与 revision
并发与重放 通过 performance_schema 确认实际数据库锁等待;同版本竞争仅一次生效,原操作重放无第二次审计,不恢复后来已收回的权限
审计失败 隔离库注入审计写入失败,权限、revision 和幂等回执全部回滚
兼容性 v1/v2 固定 JSON/摘要不变;v1 → v3 → 旧回执重放 → v2 调整期限通过
控制台 HTTP 与真库 prepare/apply 的管理员、Cookie、Origin、Fetch Metadata、严格 JSON、注销后拒绝、两代 Token 与单队列隔离通过
页面事件回归 执行实际 applications.js;默认精确集合、原操作重试、成功刷新、不读取 Token、其他模式及撤销状态隔离通过
管理 CLI 动作参数校验、禁止期限参数、0600 固定文件往返通过;另在隔离库通过真实 CLI 验证 prepare-only 前后状态不变,apply 与原文件重放仅增加一次 revision,队列范围保持
标准检查 make test、make vet、make build、make console-check、make docs-check 全部通过

复现入口与限制

make test
make vet
make build
make console-check
make docs-check
# ORBIT_TEST_MYSQL_DSN 从隔离环境私密配置加载,不指向共享业务库。
go test -race -count=1 ./internal/storage/mysql -run 'TestIntegrationCredential|TestIntegrationConsole.*Permission|TestIntegrationConsoleApplications'

没有新增数据库迁移、修改 SDK 协议或赋予普通凭据跨应用权限。上述验证不能替代生产多节点部署、权限变更审批和目标拓扑的正式验收;实际接入方授权记录位于工作区对接文档,不写入通用平台代码。