← StartseiteProgrammierung (Програмування)

Was ist Row Security in PostgreSQL und warum ist es für Rails-Entwickler wichtig?

PostgreSQL hat eine leistungsstarke, aber oft unterschätzte Funktion - Row Level Security (RLS). Kurz gesagt, es ist der Datenschutz auf Zeilenebene der Tabelle, das heißt - das System entscheidet, welche Datensätze d...

InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
PostgreSQL hat eine leistungsstarke, aber oft unterschätzte Funktion - Row Level Security (RLS).
Kurz gesagt, es ist der Datenschutz auf Zeilenebene der Tabelle, das heißt - das System entscheidet, welche Datensätze der Benutzer sehen oder ändern kann, noch bevor die Abfrage in Ihren Rails-Code gelangt.

Wie es funktioniert

In einer normalen Situation wird der Zugriff auf Daten in der Anwendung kontrolliert - zum Beispiel schreiben wir in Rails:
@posts = Post.where(user_id: current_user.id)
Aber RLS ermöglicht es, diese Überprüfung der Datenbank selbst zu überlassen.
Sie aktivieren die Sicherheitsrichtlinie für die Tabelle:
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;

CREATE POLICY user_is_owner
  ON posts
  FOR SELECT USING (user_id = current_setting('app.current_user_id')::int);
Danach, selbst wenn jemand SELECT * FROM posts ausführt,
 setzt PostgreSQL automatisch die Bedingung ein, damit der Benutzer nur seine Zeilen sieht.

Wie man RLS in Rails integriert

In Rails kann man vor der Ausführung der Abfrage current_user.id im Datenbankkontext setzen:
ActiveRecord::Base.connection.execute("SET app.current_user_id = #{current_user.id}")
Und dann geben alle Abfragen (Post.all, Post.find, sogar joins) nur die erlaubten Daten zurück - ohne zusätzliche where im Code.
Das ist praktisch für Mehrbenutzersysteme, SaaS oder APIs, wo die Sicherheit nicht nur vom Anwendungscode abhängen sollte.

Warum das überhaupt

  • Datenbanksicherheit - selbst wenn jemand versehentlich where(user_id: ...) vergisst, werden die Daten nicht durchgesickert.
  • Einfachheit der Abfragen - man kann Model.all schreiben, ohne über Filter nachzudenken.
  • Einheitliche Zugriffskontrolle - die Regeln werden zusammen mit den Daten gespeichert und nicht über Controller und Services verstreut.
RLS ersetzt nicht die Autorisierung in der Anwendung. Es ist eine zusätzliche Schutzebene, die garantiert, dass selbst auf niedriger Ebene niemand "überflüssige" Daten erhält. Row Level Security ist wie where(user_id: current_user.id), aber in die Datenbank selbst eingebaut.

🔥 Weitere Beiträge

Alle Beiträge
Was ist eine HAR-Datei (HTTP-Archiv)?
Programmierung (Програмування)25. Aug '25, 18:23 Uhr

Was ist eine HAR-Datei (HTTP-Archiv)?

HAR-Datei (HTTArchiv) - ist ein spezielles Dateiformat .har, in dem das Protokoll der Interaktion...

Was ist faktoriale Komplexität?
Programmierung (Програмування)16. Sep '25, 19:03 Uhr

Was ist faktoriale Komplexität?

Fakultative Komplexität - ist eine Situation, in der die Anzahl der Varianten oder Kombinationen ...

Was ist NP-Komplexität?
Programmierung (Програмування)16. Sep '25, 19:31 Uhr

Was ist NP-Komplexität?

NP-Schwierigkeit - ist eine Klasse von Aufgaben, für die es sehr schwierig ist, eine Lösung zu fi...

Was ist ivar in Ruby / Rails?
Programmierung (Програмування)19. Okt '25, 20:12 Uhr

Was ist ivar in Ruby / Rails?

ivar - ist eine Abkürzung für instance variable (Instanzvariable). In Ruby wird sie mit @ vor dem...

Was unterscheidet OAuth 1 von OAuth 2
Programmierung (Програмування)19. Okt '25, 20:34 Uhr

Was unterscheidet OAuth 1 von OAuth 2

OAuth 1 OAuth 1 wurde Anfang der 2000er Jahre als Methode zur sicheren Zugriffsgewährung für Drit...

Was ist ORM und wozu wird es benötigt?
Programmierung (Програмування)26. Okt '25, 14:00 Uhr

Was ist ORM und wozu wird es benötigt?

Wenn wir mit Datenbanken arbeiten, müssen wir normalerweise SQL-Abfragen schreiben - Abfragen, Ei...