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.