Files
Genarrative/.codex/skills/genarrative-admin-backoffice/references/private-table-sql-token-refresh.md
kdletters 071faa482c 统一 Rust 与 TypeScript 格式化门禁
纳入 AGC Cargo workspace 的统一 rustfmt 检查与格式化入口

完成项目 TypeScript/Prettier 与 Rust 全量格式化

修复 Pingora expected executable 门禁的空白敏感误报

同步开发运维文档与 AGC skill pack 格式化忽略规则
2026-09-01 16:28:34 +08:00

45 lines
1.7 KiB
Markdown

# 本地 private table SQL 权限修复
场景:
- 后台或 api-server 通过 SpacetimeDB HTTP SQL 读取 `tracking_event` 这类 private table。
- 本地清库、重建 standalone 或重新发布模块后,原 CLI token 失效,SQL 可能报 `no such table ... If the table exists, it may be marked private`。
操作步骤:
1. 清空本地 SpacetimeDB 数据目录
- 使用项目脚本停止本地实例后,备份或删除 `server-rs/.spacetimedb/local/data`。
- 只清本地开发环境,不要误伤远端或其他 worktree。
2. 启动本地 standalone
- 用项目约定的 `scripts/dev-rust-stack.sh` 或等价命令启动 `spacetime`。
- 确认 `/v1/ping` 可访问后再取 identity。
3. 通过 `/v1/identity` 获取新 token 和 identity
- 使用 `POST http://127.0.0.1:3101/v1/identity`
- 只记录 identity,不要在日志中打印 token 明文。
4. 用新 token 登录 CLI
- 运行:`spacetime login --token <token>`
- 这会把 token 写到本地 CLI 配置,后续 HTTP SQL 可读 private table。
5. 重新验证 SQL
- 使用带 token 的 `POST /v1/database/<db>/sql`
- 先尝试 `SELECT ... FROM tracking_event LIMIT 1`
- 若成功,再让 api-server 走同样 token。
6. 如果 api-server 需要复用 token
- 优先读取项目内本地 CLI 配置中的 token,而不是硬编码或回填到 `.env`。
- 输出日志时统一 `[REDACTED]`。
排查要点:
- `ORDER BY` 和 private table 是两个独立问题,先分开修。
- 清库后旧 token 很可能不再能看见 private table,不代表表不存在。
- 若 `/v1/identity` 返回的 token 没权限,再检查当前 standalone 是否就是刚启动的本地实例、database 名是否一致、模块是否已重新发布。