用符号求值把行级安全策略压进编译期
来源: acadia.engineering — 2026-09-16
概述
Acadia 要求每张表都必须显式声明行级安全策略,并在全系统的 access、insert、update、remove 事务上强制生效,因此不依赖程序员的记性,也不会在某些奇怪的分支上「忘记」检查。为了让策略不拖慢查询,Acadia 在编译期做符号求值,把所有不依赖表数据的计算提前消掉,把表达力很强的策略简化成每条查询上简洁的 WHERE 子句。文章用图书评论表和用户表举例,展示如何用 token 表达不同授权场景。
核心要点
- 所有表必须写出行级安全策略,并且该策略会在全系统查询中被强制生效,不存在遗漏的角落。
- 编译期符号求值把与表数据无关的计算全部约简掉,让策略落到简化的 WHERE 子句上。
- 邮箱加密码、浏览器 cookie、验证邮件这三种场景被表达成同一张表上的不同授权上下文。
- 安全不再依赖纪律与警惕:这件事不是靠人记得,而是由 Acadia 直接强制。
- 策略越精确、越有表达力,越需要这种编译期约简来避免查询变慢。
金句
有了清晰的策略还不够,我们还希望查询尽可能快——这正是编译期符号求值要解决的问题。
👍 0
👎 0
返回 Lobsters 首页