Platform
Row Level Security
Protect data with Postgres policies and auth.uid().
This page is available in Polish only for now. The commands, code and API calls below are the same in every language — an English translation is on its way. Open the Polish page
Klucz anon jest publiczny, więc to polityki RLS decydują, kto może czytać i zmieniać dane. Zasada: każda tabela w schemacie public musi mieć włączone RLS.
Włączenie RLS
alter table public.todos enable row level security;
Bez polityk tabela z włączonym RLS jest niedostępna dla anon i authenticated — to bezpieczny stan domyślny.
Typowe polityki
-- każdy może czytać opublikowane wpisy
create policy "Publiczny odczyt"
on posts for select
using (published = true);
-- autor zarządza swoimi wpisami
create policy "Autor edytuje"
on posts for update to authenticated
using (auth.uid() = author_id)
with check (auth.uid() = author_id);
-- członkowie zespołu widzą dane zespołu
create policy "Członkowie zespołu"
on projects for select to authenticated
using (
team_id in (select team_id from team_members where user_id = auth.uid())
);
Wydajność
- Opakuj
auth.uid()w podzapytanie:using ((select auth.uid()) = user_id)— Postgres policzy je raz zamiast dla każdego wiersza. - Dodaj indeksy na kolumnach używanych w politykach (np.
user_id). - Określaj role w politykach (
to authenticated), by ograniczyć ich ewaluację.
Klucz service_role
Klucz service_role omija RLS. Używaj go wyłącznie na serwerze (backend, Edge Functions, zadania cron). Jeśli wycieknie — natychmiast wygeneruj nowy sekret JWT w ustawieniach projektu.
Checklist bezpieczeństwa
- RLS włączone na wszystkich tabelach w
public. - Brak klucza
service_rolew kodzie frontendu i w repozytorium. - Silne hasło do bazy, rotowane po odejściu członka zespołu.
- Ograniczone Redirect URLs w ustawieniach Auth.
- Włączone 2FA na koncie HostBase.