Prüfregel · RSC-SEC-066
RLS-Policy prüft nur die Anmeldung, nicht den Eigentümer
Findet Policies mit `auth.role() = 'authenticated'` oder `auth.uid() is not null` ohne Bezug auf den Datensatz-Eigentümer.
Warum das zählt
Das ist das häufigste Mandantentrennungs-Leck in KI-gebauten Supabase-Apps — und das unauffälligste. Die Policy verlangt, dass jemand angemeldet ist, aber nicht, dass ihm der Datensatz gehört. Wer sich irgendein Konto anlegt, liest die Daten aller anderen.
Von außen ist das unsichtbar: Der anonymen Rolle gibt diese Policy nichts, die Tabelle antwortet mit null Zeilen und sieht in jedem Außen-Scan sauber aus. Erst ein angemeldetes Konto zeigt den Unterschied — deshalb rutscht der Fehler durch fast jede Prüfung.
Fix: Jede Bedingung an auth.uid() binden, typischerweise `auth.uid() = user_id`. Bei geteilten Datensätzen über eine Mitgliedschaftstabelle prüfen, nicht über die bloße Rolle. Wichtig: für jede Operation einzeln — SELECT, INSERT, UPDATE und DELETE haben getrennte Bedingungen.
Prüfstufe
So behebt ihr es
Die Bedingung an die Identität binden: `using (auth.uid() = user_id)`.