用途:在 PostgreSQL 共享模式上实现多租户隔离、Supabase 基于认证的行级访问及逐行授权。RLS 由 PostgreSQL 自身执行的隐式 WHERE 过滤,是共享模式多租户隔离的正确原语。
主要能力与关键要点:RLS 默认关闭,需 ALTER TABLE t ENABLE ROW LEVEL SECURITY;无策略时对非属主默认拒绝。表属主与带 BYPASSRLS 的角色会跳过策略,可用 ALTER TABLE t FORCE ROW LEVEL SECURITY 约束属主(不影响 BYPASSRLS 或超级用户)。USING 过滤已有行(SELECT、UPDATE 目标、DELETE),WITH CHECK 校验新行值(INSERT、UPDATE 后),UPDATE 两者都需。PERMISSIVE 策略按 OR 组合,RESTRICTIVE 按 AND 组合,至少需一个 PERMISSIVE。
使用方式:示例最小策略对 tasks 启用并强制 RLS,CREATE POLICY tasks_owner ON tasks FOR ALL TO authenticated USING (user_id = (SELECT auth.uid())) WITH CHECK (...)。将 auth.uid() 包在子查询中可每查询求值一次以提升性能,并为策略引用列建索引。也提供按 tenant_id 隔离、Supabase 用户行、RESTRICTIVE 全局守卫、BYPASSRLS ETL 角色等模式。
适用场景:隔离租户/用户/组织、审查 CREATE/ALTER/DROP POLICY、PostgREST 暴露的 Supabase 表、调试行不可见或跨租户可见、审计绕过 RLS 的角色。
限制:不适用于列级权限、静态加密、替代认证或外键可见性。RLS 自 9.5 稳定,语法适用于 15/16/17。详细语法、更多模式与反模式见其 reference 文件;其具体内容及收费、价格、平台等资料未提供。