Files
Genarrative/.hermes/skills/genarrative-admin-backoffice/references/private-table-sql-token-refresh.md
kdletters 10ed4fa051
Some checks failed
CI / verify (push) Has been cancelled
docs: clarify SpacetimeDB root-dir usage
2026-05-11 14:27:33 +08:00

1.7 KiB
Raw Blame History

本地 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 名是否一致、模块是否已重新发布。