安全与权限
安全边界
Workspace 是不可信输入。任何人都可以复制、查看和修改 Workspace,但只有通过 Runtime Database 鉴权和权限检查的操作才能查询受保护数据或提交 Merge。
数据库权限不能保护已经被操作系统允许读取的明文 Markdown。Runtime Database 物理目录仍需使用操作系统文件权限保护;数据库负责 API、Update、Merge 和 Web UI 边界。
内置用户与角色
数据库使用内置系统表保存 User、Role、Credential 和 Audit。完整产品采用三个简单角色:
| Role | 权限 |
|---|---|
owner | 全部数据操作、Merge、Schema、用户、权限和维护 |
editor | 查询、运行时 Mutation、Update 和 Merge |
reader | 查询和导出 Workspace,不能修改 Runtime Database |
不提供 Field 或单 Record ACL。权限判断以 Database 和系统操作为边界,保持模型简单、可解释。
Credential
- 密码只保存强密码哈希,不保存可恢复明文;
- API Token 只保存哈希,明文只在创建时显示;
- 必须恢复的敏感数据使用带完整性校验的加密;
- 加密主密钥不能进入 Workspace、日志或普通数据导出;
- Credential 创建、撤销、轮换和失败尝试进入审计记录。
当前实现支持三种 Credential:Password、API Token 和有到期时间的 Session。Password 通过 username:secret 使用;Token 与 Session 使用随机生成的 Bearer 值。三者均以 scrypt Hash 持久化,Token/Session 明文只在创建时返回。管理接口可以列出不含 Hash 的 Credential Metadata,并且按照 Credential ID 撤销 Token 或 Session。
Username 创建后不可复用或修改。Role 变更会同时更新该 User 的 Password、Token、Session 和 _users 投影;禁用 User 会立即撤销其全部 Credential。系统拒绝降级、禁用或撤销最后一个有效 Owner Password,避免数据库失去管理入口。
Workspace 中的系统表
用户表可以作为只读投影进入 Workspace,例如:
id, username, role, status投影不能包含密码哈希、Token、密钥、Session 或恢复信息。用户可以自由编辑对应 Markdown,但 Merge 必须将任何变化标记为 Protected Change,并提供:
- 恢复 Runtime 值;
- 从 Plan 排除;
- 打开 Web UI 权限页面;
- 调用经过鉴权的管理 API。
权限和 Credential 永远不能通过 Workspace Merge 修改,即使调用者是 Owner,也必须使用 Web UI 或管理 API。
Workspace 完整性
Based Workspace 的 Manifest 和 Base 使用 Runtime Database 签名。签名用于检测损坏和篡改,不代表 Workspace 获得权限,也不包含可以伪造新签名的秘密。
Merge 时同时检查签名、Credentials 和当前权限。复制一个合法 Workspace 不会复制 Merge 权限。
审计
审计记录至少包含:
- Actor User 与 Credential 类型;
- 操作来源:Embedded、API、Web UI、CLI 或 Merge;
- Transaction 与 Merge Plan ID;
- 受影响 Collection 与 Record UUID;
- 权限、Schema 和冲突决策;
- 成功、拒绝、回滚与恢复结果;
- 时间与 Writer Host 信息。
审计默认不保存完整敏感正文。Server 会为认证失败、权限拒绝、Credential 与 Role 生命周期、维护操作、事务回滚、Merge Plan、冲突选择、排除和 Apply 保存 Actor、Credential 类型、Writer Host 与来源;Merge Apply 使用 merge 来源并保存 Plan ID。Owner 可以查询和导出审计记录,但不能通过 Workspace 修改历史审计。
Server 安全
本地 Server 默认只监听 Loopback。开放到其他网络接口必须显式配置认证、TLS、允许来源和访问日志。Web UI 使用同一 API 与权限系统,不拥有绕过数据库鉴权的内部写入通道。
Server 同时执行 Origin 检查、请求大小限制、Client 速率限制、CORS 允许头约束和基础安全响应头。CLI、Web UI 与普通 API 调用使用同一鉴权边界,并且把操作来源记录为 cli、web 或 api;失败鉴权只记录 Username 或 Anonymous,不记录提交的 Secret。
多数据库控制面把连接现有目录视为 Owner 维护操作。调用者必须先使用默认数据库 Owner Credential;Server 再使用请求中的目标 Credential 验证目标数据库和完整性,解析目录的 realpath,拒绝重复路径和重复数据库身份,并且只持久化显示名称、数据库 ID 与真实路径。目标 Credential 不得进入注册表、日志或响应。断开连接只关闭 Writer Host 和删除注册信息,不能移动、清空或删除源目录。