Files
gongxue-base/docs/refactor/data-governance.md
2026-06-21 21:54:43 +08:00

66 lines
2.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 数据治理与安全规范
这次重构不按 PocketBase 旧字段原样搬迁。旧集合只作为历史输入源,正式业务表按商用 SaaS 规范重新建模。
## 默认原则
- 旧数据先进入 `pb_raw_records`,且默认脱敏。
- 密钥、token、session、private key、AppSecret、支付密钥不得进入 `public` schema。
- 私密配置进入 `app_private.tenant_secrets`,生产环境再接云厂商 KMS/Vault。
- `settings` 不再作为业务表使用必须拆成公开配置、支付账户、短信配置、OAuth 配置、存储配置。
- `users` 不再作为万能表,拆成用户、身份、租户成员、学生资料、权益、学习记录。
- `users.isSvip``svipExpiry``svipRegions` 不作为新系统权限源,统一迁移为 `entitlements`
- `users.stats.favorites/wrongBook` 不继续留在 JSON 中,统一迁移为收藏表和错题表。
- `crm_config`、支付、短信、OAuth、对象存储等配置不得在 `public` schema 中保存明文密钥;公共表只保留可展示配置或 secret 引用。
- 导入后的上线闸门是 `npm run pb:import:validate`:有 `FAIL` 不上线,`WARN` 必须由业务确认并记录。
## 禁止直接复制的字段类型
字段名包含以下关键词时默认视为敏感:
```text
password
token
secret
privateKey
sessionKey
accessKey
appKey
apiKey
openid
unionid
aesKey
notifyToken
```
这些字段默认在导入原始区时写入 `[REDACTED]`。如果确实需要迁移到私有表,必须显式设置:
```bash
IMPORT_SECRET_VALUES=true npm run import:json
```
并且只能进入 `app_private.tenant_secrets`
## 导入质量报告
导入时会写入 `pb_import_issues`,用于记录:
- 敏感字段来源
- 旧 JSON 字段需要拆表
- `settings` 大杂烩配置风险
- `users` 会员状态需要转权益
查看旧 schema 风险:
```bash
npm run pb:schema:risk
```
## 后续硬性验收
- RLS 覆盖所有带 `tenant_id` 的表。
- 租户间数据隔离测试必须自动化。
- 支付 webhook 必须幂等。
- 订单金额、支付流水、权益开通必须可审计。
- 管理员操作必须写审计日志。