← strona głównaProgramowanie (Програмування)

Czym jest Row Security w PostgreSQL i po co jest to deweloperom Rails?

Row Level Security w PostgreSQL to ochrona danych na poziomie wierszy tabeli. Umożliwia kontrolowanie dostępu bezpośrednio w bazie danych, zwiększając bezpieczeństwo aplikacji Rails.

Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
W PostgreSQL jest potężna, ale często niedoceniana funkcja - Row Level Security (RLS).
Mówiąc krótko, to ochrona danych na poziomie wierszy tabeli, czyli - system decyduje, które dokładnie rekordy użytkownik może zobaczyć lub zmienić, jeszcze zanim zapytanie trafi do twojego kodu Rails.

Jak to działa

W normalnej sytuacji dostęp do danych kontrolowany jest w aplikacji - na przykład w Rails piszemy:
@posts = Post.where(user_id: current_user.id)
Jednak RLS pozwala delegować tę kontrolę samej bazie.
Włączasz politykę bezpieczeństwa dla tabeli:
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);
Po tym nawet jeśli ktoś wykona SELECT * FROM posts,
PostgreSQL automatycznie wstawi warunek, aby użytkownik widział tylko swoje wiersze.

Jak zintegrować RLS w Rails

W Rails można przed wykonaniem zapytania ustawić current_user.id w kontekście bazy:
ActiveRecord::Base.connection.execute("SET app.current_user_id = #{current_user.id}")
I wtedy wszystkie zapytania (Post.all, Post.find, nawet joins) będą zwracać tylko dozwolone dane - bez dodatkowych where w kodzie.
To jest wygodne dla systemów wielodostępnych, SaaS lub API, gdzie bezpieczeństwo nie powinno zależeć tylko od poziomu aplikacji.

Po co to w ogóle

  • Bezpieczeństwo na poziomie Bazy Danych - nawet jeśli ktoś omyłkowo zapomni o where(user_id: ...), dane nie wyciekną.
  • Prostota zapytań - można pisać Model.all, nie myśląc o filtrach.
  • Jednolity kontrola dostępu - zasady są przechowywane razem z danymi, a nie rozrzucone po kontrolerach i serwisach.
RLS nie zastępuje autoryzacji w aplikacji. Jest to dodatkowy poziom ochrony, który gwarantuje, że nawet na niskim poziomie nikt nie uzyska "zbędnych" danych. Row Level Security - to jak where(user_id: current_user.id), ale wbudowane w samą bazę danych.

🔥 Więcej postów

Wszystkie wpisy
Co to jest plik HAR (HTTP Archive)?
Programowanie (Програмування)25 sie '25 18:23

Co to jest plik HAR (HTTP Archive)?

Plik HAR (HTTP Archive) — to format .har, który przechowuje dziennik pracy przeglądarki z siecią....

Czym jest złożoność faktorialna?
Programowanie (Програмування)16 wrz '25 19:03

Czym jest złożoność faktorialna?

Złożoność faktorialna to szybki wzrost liczby wariantów, gdy dla n elementów możliwych permutacji...

Czym jest NP-trudność?
Programowanie (Програмування)16 wrz '25 19:31

Czym jest NP-trudność?

NP-trudność – to klasa zadań, w której znalezienie rozwiązania jest niezwykle trudne, ale sprawdz...

Czym jest ivar w Ruby / Rails?
Programowanie (Програмування)19 paź '25 20:12

Czym jest ivar w Ruby / Rails?

ivar w Ruby to zmienna instancji (instance variable), która jest oznaczana @. W Rails przekazuje ...

Czym różni się OAuth 1 od OAuth 2
Programowanie (Програмування)19 paź '25 20:34

Czym różni się OAuth 1 od OAuth 2

Post opisuje OAuth 1 i OAuth 2: ich historię, przeznaczenie, różnice, cechy bezpieczeństwa oraz z...

Czym jest ORM i po co jest potrzebny?
Programowanie (Програмування)26 paź '25 14:00

Czym jest ORM i po co jest potrzebny?

ORM - to technologia, która pozwala na pracę z bazami danych za pomocą obiektów kodu, upraszczają...