---
title: "Supabase \"RLS disabled in public\": mida see tähendab"
description: "Mida tähendab Supabase Advisori viga rls_disabled_in_public, mida avalik võti sellise tabeliga mu kohalikus testis tegi ja kuidas seda ohutult parandada."
url: "https://madsalt.tech/et/notes/supabase-rls-disabled-in-public/"
author: "Denys Zaichenko"
author_url: "https://madsalt.tech/et/about/"
language: "et"
published: 2026-10-28
---

# Supabase "RLS disabled in public": mida see tähendab

Lühidalt

"RLS Disabled in Public" (lint `0013_rls_disabled_in_public`, tase ERROR) tähendab, et avaldatud skeemi tabelil on row level security väljas, samal ajal kui `anon` või `authenticated` saab sealt teha select'i. Minu kohalikus testis luges avalik võti sellisest tabelist kõik 3 rida 3-st ja lisas uue vastusega `201 Created`. Lülitage RLS sisse, lisage poliitika iga operatsiooni jaoks ja kontrollige õigusi, kõik ühes migratsioonis.

Ehitasin tasuta [Supabase'i turvakontrolli](https://madsalt.tech/et/tools/supabase-security-check/) ja selle esimene reegel, "RLS keelatud avalikel tabelitel", on sama leid, mida Supabase'i Security Advisor veana raporteerib. See on kõige sagedasem auk, mida AI tööriistadega ehitatud rakendustes leian, nii et siin on, mida see tähendab ja mida see lubas, kui seda reprodutseerisin.

## Mida tähendab "RLS disabled in public"?

Security Advisor käivitab lint'i nimega `rls_disabled_in_public`. Selle [SQL](https://github.com/supabase/splinter/issues/82) märgib tabeli, kui kolm asja on korraga tõesed:

1. See on tavaline tabel, millel on row level security väljas.
2. Rollil `anon` või `authenticated` on sellel `SELECT`.
3. Selle skeem on Data API Exposed schemas nimekirjas, mis on vaikimisi `public`.

[Lint'i leht](https://supabase.github.io/splinter/0013_rls_disabled_in_public/) hindab selle tasemele ERROR ja nimetab täielikku create-, read-, update- ja delete-juurdepääsu üle interneti "kriitiliselt ebaturvaliseks konfiguratsiooniks" ("a critically unsafe configuration"). Nimes olev "public" on skeem, kuid lint katab iga avaldatud skeemi, mistõttu väärib pilku ka nimekirja lisatud skeem; kirjutasin sellest märkuses [Supabase exposed schemas](https://madsalt.tech/et/notes/supabase-exposed-schemas/).

## Mida avalik võti sellise tabeliga teha saab?

Lõin kohalikul Supabase'i pinul (CLI 2.109.1, Postgres 17.6, PostgREST 14.14) tabeli `orders` kolme võltskliendiga, õigustega, mille olemasolevad projektid uutele tabelitele annavad, ja RLS väljas. Seejärel kutsusin Data API-t publishable key'ga, nagu brauser teeb:

![Üks tabel: RLS väljas ja sees. Avaliku võtmega, kohalik Supabase, 3 rida võltstellimusi. RLS väljas, lugemine: Publishable key → orders, RLS väljas → 3 rida 3-st; RLS väljas, lisamine: Publishable key → orders, RLS väljas → 201 Created; RLS sees, poliitikat veel pole: Publishable key → orders, RLS sees → 0 rida.](https://madsalt.tech/charts/et/supabase-rls-disabled-in-public.svg)

*Minu reproduktsioon kohalikul Supabase'i pinul, 23. oktoober 2026.*

| Päring publishable key'ga        | RLS väljas                               | RLS sees, poliitikat pole                                 |
| -------------------------------- | ---------------------------------------- | --------------------------------------------------------- |
| `GET /rest/v1/orders?select=*`   | `200`, kõik 3 rida nimede ja e-postidega | `200`, `[]`                                               |
| `POST /rest/v1/orders` uue reaga | `201 Created`                            | `401`, 42501 "new row violates row-level security policy" |

Igaüks, kes teie rakenduse avab, saab publishable key kopeerida lehelt. Kui RLS on väljas, on see võti selle tabeli lugemis- ja kirjutamispääs.

## Kuidas seda rakendust lõhkumata parandada?

Pelgalt RLS-i sisselülitamine paneb tabeli rakendusele mitte midagi tagastama, sest poliitikat pole veel. Seda tühja ekraani nähes lisavad inimesed ja AI tööriistad poliitika `using (true)`, mis annab iga rea kõigile tagasi. Miks update ja delete siis teatavad õnnestumisest, ilma midagi muutmata, on artiklis [Enable RLS in Supabase: mida tabel pärast tagastab](https://madsalt.tech/et/blog/how-to-enable-rls-in-supabase/). Kirjutage päris poliitikad samas migratsioonis:

```sql
alter table public.orders enable row level security;

revoke all on table public.orders from anon, authenticated;
grant select, insert on table public.orders to authenticated;

create policy "Customers read their orders"
on public.orders for select
to authenticated
using ((select auth.uid()) = user_id);

create policy "Customers create their orders"
on public.orders for insert
to authenticated
with check ((select auth.uid()) = user_id);
```

Kui tabel on mõeldud avalikuks, näiteks avaldatud artiklite loend, hoidke RLS siiski sees ja kirjutage üks `select` poliitika rollile `anon`, ilma kirjutusõigusteta. Kui te Data API-t kunagi ei kasuta ja räägite Postgresiga ainult oma serverist, eemaldage hoopis `public` nimekirjast Exposed schemas, nagu Supabase'i hooldajad [samas issue's](https://github.com/supabase/splinter/issues/82) soovitasid.

Et uued tabelid kunagi ilma RLS-ita ei alustaks, on Supabase'i [event triggers juhendis](https://supabase.com/docs/guides/database/postgres/event-triggers) trigger, mis lülitab selle sisse igal skeemis `public` loodud tabelil. Ja alates 30. oktoobrist 2026 ei saa uued tabelid vaikimisi Data API õigusi, nii et need vastavad `42501`-ga, kuni te õigused annate; kattisin seda märkuses [Supabase 42501 permission denied](https://madsalt.tech/et/notes/supabase-42501-permission-denied/).

## Mida puhas tulemus ei tõesta?

See, et RLS on sees, ei ütle midagi selle kohta, kas poliitikad on õiged. Samas testis andis poliitika kujul `using (true)` avalikule võtmele jälle kõik 3 rida ja see lint jääb vaikseks, kui RLS on sees. Kontrollil on selleks eraldi reegel, "Poliitikad, mis lubavad kõik read", ja [kuidas Supabase'i RLS-i testida](https://madsalt.tech/et/blog/how-to-test-supabase-rls/) näitab, kuidas iga poliitikat päris kasutajatega tõestada. Poliitikad, millest alustada, igaüks päris kasutajatega API kaudu käivitatud, on artiklis [Supabase RLS policy näited, testitud API kaudu](https://madsalt.tech/et/blog/supabase-rls-policy-examples/).
