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

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

Row Level Security in PostgreSQL ist der Datenschutz auf Zeilenebene der Tabelle. Es ermöglicht die Kontrolle des Zugriffs direkt in der Datenbank und erhöht die Sicherheit von Rails-Anwendungen.

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 (HTTP-Archiv) — ist ein .har-Format, das das Protokoll der Browserinteraktion mit dem N...

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

Was ist faktoriale Komplexität?

Faktorielle Komplexität ist das schnelle Wachstum der Anzahl der Varianten, wenn für n Elemente m...

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

Was ist NP-Komplexität?

NP-Schwierigkeit ist eine Klasse von Problemen, bei denen es extrem schwierig ist, eine Lösung zu...

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

Was ist ivar in Ruby / Rails?

ivar in Ruby ist eine Instanzvariable, die mit @ gekennzeichnet ist. In Rails überträgt sie Daten...

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

Was unterscheidet OAuth 1 von OAuth 2

Der Beitrag erzählt von OAuth 1 und OAuth 2: ihrer Geschichte, ihrem Zweck, den Unterschieden, de...

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?

ORM ist eine Technologie, die es ermöglicht, mit Datenbanken über Code-Objekte zu arbeiten, die E...