用途:为多租户 SaaS 应用实现 PostgreSQL 行级安全(RLS),在数据库层强制数据隔离,避免仅靠应用层过滤被绕过。适用于用户只能访问自身数据、按组织隔离数据、增加纵深防御等场景。
主要能力:启用与强制 RLS(ALTER TABLE ... ENABLE/FORCE ROW LEVEL SECURITY);按用户(user_id = auth.uid())和组织(organization_id IN 子查询)编写 SELECT/INSERT/UPDATE/DELETE 策略;基于角色(viewer/editor/admin/owner)的权限策略;使用 SECURITY DEFINER 辅助函数复用逻辑;Supabase 的 auth.uid()/auth.email() 与 service_role 绕过策略;TypeScript 客户端与服务端管理客户端集成;策略测试与性能优化。
使用方式:先对含用户数据的表启用并 FORCE RLS,再为各操作创建策略;组织隔离可用 get_user_organizations() 等辅助函数;角色控制可用 has_role() 函数;Supabase 中客户端使用 anon key 走 RLS,服务端管理操作使用 service role key 绕过;测试可用 SET request.jwt.claims 模拟用户,或编写自动化测试验证隔离。
限制与注意:需为策略涉及的列建索引以避免性能问题,避免在策略中使用复杂子查询;常见错误包括忘记启用 RLS、未使用 FORCE、策略列未建索引、仅依赖应用层过滤;service role key 仅限服务端使用。资料未提供具体收费、平台支持范围与效果数据。