Izolacja danych firm w systemie wielofirmowym: dlaczego RLS w bazie danych, a nie tylko filtr w aplikacji
Wiedza ekspercka. Treść zweryfikowana: 1 listopada 2026.
W systemie, w którym jedna instalacja obsługuje wiele firm, najgroźniejszy błąd to zapytanie, które zapomniało dodać warunek „tylko moja firma”. Gdy izolacja opiera się wyłącznie na tym warunku w kodzie aplikacji, jedno przeoczenie wystarcza do wycieku. Dlatego izolację warto zakotwiczyć w bazie danych.
Na czym polega RLS
RLS (row-level security) to mechanizm bazy danych, który sam dopisuje do każdego zapytania warunek dostępu do wierszy. Aplikacja deklaruje, w imieniu której firmy działa, a baza zwraca wyłącznie jej wiersze, nawet jeśli zapytanie o to nie prosiło.
Zasady, które robią różnicę
- Każda tabela z danymi firmy ma identyfikator firmy i politykę dostępu; reguła jest włączona także dla właściciela tabeli.
- Kontekst firmy ustawia się lokalnie dla transakcji, a nie dla połączenia. Dzięki temu pula połączeń nie przenosi kontekstu jednej firmy do żądania innej.
- Aplikacja łączy się rolą bez uprawnień do omijania reguł. Zestawienia ponad granicami firm (np. panel obsługi) idą wydzieloną rolą tylko do odczytu, w transakcjach tylko do odczytu.
- Biuro rachunkowe ma dostęp do klienta przez członkostwo w jego firmie, a nie przez „tylne drzwi” między firmami.
Jak to testować
- Dla każdej tabeli sprawdź próbę odczytu cudzych danych: odpowiedź ma być pusta, a nie błędem aplikacji.
- Sprawdź próbę zapisu z identyfikatorem cudzej firmy: baza ma ją odrzucić.
- Dodaj test izolacji do każdej nowej tabeli i uczyń go warunkiem wdrożenia.