用途:对 Supabase/Postgres 的行级安全(RLS)与访问控制做纯规划型审计,回答“谁能读写哪些行”。适用于检查 RLS 是否开启、Supabase 是否锁好、是否任何人都能读表、审计数据库策略、service_role 密钥、安全顾问告警、上线前数据库加固等场景。不适用于纯查询性能、模式设计或广义 OWASP 审计。
主要能力:枚举暴露模式(尤其 public)中的每个表与视图及其 relrowsecurity 状态和策略集;按 A–E 清单检查:A 是否开启 RLS(含视图 security_invoker/definer、关联表);B 策略是否真实(USING (true)、逻辑反转、操作覆盖缺失、未绑定行属主);C 密钥作用域(客户端是否泄露 service_role、anon 是否安全、Edge Functions 是否自行鉴权);D 鉴权调用正确性与性能(auth.uid() 逐行调用、auth.jwt() 同类陷阱);E 默认值与相邻入口(Storage 桶、Realtime、pg_policies 与访问矩阵对照)。产出谁可做什么的访问矩阵,按暴露程度分级(Critical/High/Med/Low),分阶段编排修复顺序,输出 plan-rls-audit.md。
使用方式:通过 Supabase MCP、pg_tables、迁移文件或仪表盘安全顾问读取状态;先盘点、再分类、构建访问矩阵、分阶段编排,最后写报告并在对话中给出最高影响发现与首个待批准阶段。仅规划,不运行 ALTER TABLE、CREATE POLICY 或迁移;不得为“验证”而放宽访问。
限制:仅审计与规划,执行交由 db-migrator、backend-patterns、backend-db-performance、audit-security 等;暴露的 service_role 密钥转交 plan-secrets-audit 轮换;客户端 .eq('user_id', …) 过滤不算 RLS;anon 密钥视为公开;严重度按当前可达性而非修复工作量评定。具体命令与安装方式暂未提供。