本文在PostgreSQL 17上实测了四套Supabase行级安全策略:仅本人可见、公开只读、团队成员可见、管理员经JWT读取。四者均能阻止用户互访数据,但团队策略若用逐行函数判断,计数耗时744毫秒,改为集合判断仅7.7毫秒。建议用security definer函数返回团队ID集合,并注意JWT角色应读app_metadata而非user_metadata。
本文实测 PostgreSQL 17 行级安全(RLS)的绕过机制:超级用户和 BYPASSRLS 角色始终绕过;表所有者及继承其权限的成员默认绕过,FORCE 仅约束所有者本人,且所有者可自行关闭。BYPASSRLS 不随成员继承,需 SET ROLE。SECURITY DEFINER 函数随所有者绕过。TRUNCATE、目录行数统计和外键约束不受 RLS 检查。建议应用角色不继承迁移角色,并谨慎授予 TRUNCATE。
完成下面两步后,将自动完成登录并继续当前操作。