Row Level Security
Row Level Security (RLS) zum Schutz von Daten verstehen und implementieren.
Hinweis: Dies sind Beispiel- bzw. Platzhalterinhalte zu Demonstrationszwecken.
Row Level Security (RLS) ist das integrierte Autorisierungssystem von PostgreSQL, das steuert, auf welche Zeilen in Datenbanktabellen Nutzer zugreifen können.
Warum RLS?
RLS bietet mehrere Vorteile:
- Sicherheit auf Datenbankebene – Schutz selbst dann, wenn der Anwendungscode Fehler enthält
- Automatische Durchsetzung – Keine manuellen Autorisierungsprüfungen erforderlich
- Mandantentrennung – Stellt sicher, dass Nutzer nur ihre eigenen Daten sehen
- Performance – Auf Datenbankebene optimiert
RLS aktivieren
Für alle Tabellen sollte RLS aktiviert sein:
ALTER TABLE your_table ENABLE ROW LEVEL SECURITY;
Gängige Richtlinienmuster
Zugriff auf persönliche Konten
CREATE POLICY "Users can access their personal account data" ON your_table FOR ALL USING (account_id = auth.uid());
Zugriff auf Team-Konten
CREATE POLICY "Users can access their team account data"
ON your_table FOR ALL
USING (
account_id IN (
SELECT account_id FROM accounts_memberships
WHERE user_id = auth.uid()
)
);
Lese- und Schreibberechtigungen
-- Alle Mitglieder dürfen lesen
CREATE POLICY "Team members can view data"
ON your_table FOR SELECT
USING (account_id IN (SELECT get_user_accounts(auth.uid())));
-- Nur Inhaber dürfen ändern
CREATE POLICY "Only owners can modify data"
ON your_table FOR UPDATE
USING (
account_id IN (
SELECT account_id FROM accounts_memberships
WHERE user_id = auth.uid() AND role = 'owner'
)
);
RLS-Richtlinien testen
Testen Sie Ihre RLS-Richtlinien immer, um sicherzustellen, dass sie korrekt funktionieren:
-- Als bestimmter Nutzer testen SET request.jwt.claims.sub = 'user-uuid-here'; -- Versuchen, Daten abzufragen SELECT * FROM your_table; -- Zurücksetzen RESET request.jwt.claims.sub;
Umgehung durch Admins
Service-Role-Schlüssel umgehen RLS. Verwenden Sie sie mit äußerster Vorsicht und implementieren Sie bei der Nutzung des Admin-Clients immer manuelle Autorisierungsprüfungen.