---
title: "Supabase „RLS disabled in public\": ką tai reiškia"
description: "Ką reiškia Supabase Advisor klaida rls_disabled_in_public, ką viešasis raktas padarė tokiai lentelei mano vietiniame teste ir kaip tai saugiai ištaisyti."
url: "https://madsalt.tech/lt/notes/supabase-rls-disabled-in-public/"
author: "Denys Zaichenko"
author_url: "https://madsalt.tech/lt/about/"
language: "lt"
published: 2026-10-28
---

# Supabase „RLS disabled in public": ką tai reiškia

Trumpai

„RLS Disabled in Public" (lint `0013_rls_disabled_in_public`, lygis ERROR) reiškia, kad atskleistos schemos lentelėje išjungtas row level security, o `anon` ar `authenticated` gali daryti select. Mano vietiniame teste viešasis raktas iš tokios lentelės perskaitė visas 3 eilutes iš 3 ir įterpė naują su `201 Created`. Įjunkite RLS, pridėkite politiką kiekvienai operacijai ir patikrinkite teises, viską vienoje migracijoje.

Sukūriau nemokamą [Supabase saugos tikrintuvą](https://madsalt.tech/lt/tools/supabase-security-check/), o jo pirmoji taisyklė „RLS išjungtas atskleistose lentelėse" yra tas pats radinys, kurį Supabase Security Advisor praneša kaip klaidą. Tai dažniausia spraga, kurią randu su AI įrankiais sukurtose programose, todėl štai ką tai reiškia ir ką leido, kai tai atkartojau.

## Ką reiškia „RLS disabled in public"?

Security Advisor paleidžia lint, vadinamą `rls_disabled_in_public`. Jo [SQL](https://github.com/supabase/splinter/issues/82) pažymi lentelę, kai vienu metu teisingi trys dalykai:

1. Tai paprasta lentelė su išjungtu row level security.
2. `anon` ar `authenticated` turi jai `SELECT`.
3. Jos schema yra Data API sąraše Exposed schemas, kuris pagal numatytuosius nustatymus yra `public`.

[Lint puslapis](https://supabase.github.io/splinter/0013_rls_disabled_in_public/) jį vertina kaip ERROR, o visišką create, read, update ir delete prieigą internetu vadina „kritiškai nesaugia konfigūracija" („a critically unsafe configuration"). „Public" pavadinime yra schema, bet lint apima kiekvieną atskleistą schemą, todėl dėmesio vertas ir papildomas schemos įrašas tame sąraše; apie tai rašiau pastaboje [Supabase exposed schemas](https://madsalt.tech/lt/notes/supabase-exposed-schemas/).

## Ką viešasis raktas gali padaryti tokiai lentelei?

Vietinėje Supabase aplinkoje (CLI 2.109.1, Postgres 17.6, PostgREST 14.14) sukūriau lentelę `orders` su trimis išgalvotais klientais, su teisėmis, kurias esami projektai suteikia naujoms lentelėms, ir išjungtu RLS. Tada kviečiau Data API su publishable key, kaip tai daro naršyklė:

![Viena lentelė: RLS išjungtas ir įjungtas. Su viešuoju raktu, vietinis Supabase, 3 išgalvotų užsakymų eilutės. RLS išjungtas, skaitymas: Publishable key → orders, RLS išjungtas → 3 iš 3 eilučių; RLS išjungtas, įterpimas: Publishable key → orders, RLS išjungtas → 201 Created; RLS įjungtas, politikos dar nėra: Publishable key → orders, RLS įjungtas → 0 eilučių.](https://madsalt.tech/charts/lt/supabase-rls-disabled-in-public.svg)

*Mano atkartojimas vietiniame Supabase, 2026 m. spalio 23 d.*

| Užklausa su publishable key            | RLS išjungtas                                    | RLS įjungtas, politikos nėra                              |
| -------------------------------------- | ------------------------------------------------ | --------------------------------------------------------- |
| `GET /rest/v1/orders?select=*`         | `200`, visos 3 eilutės su vardais ir el. paštais | `200`, `[]`                                               |
| `POST /rest/v1/orders` su nauja eilute | `201 Created`                                    | `401`, 42501 „new row violates row-level security policy" |

Kiekvienas, atidaręs jūsų programą, gali nukopijuoti publishable key iš puslapio. Kai RLS išjungtas, šis raktas yra skaitymo ir rašymo leidimas į tą lentelę.

## Kaip tai ištaisyti nesugadinant programos?

Vien įjungus RLS lentelė programai nieko nebegrąžina, nes politikos dar nėra. Tame tuščiame ekrane žmonės ir AI įrankiai prideda politiką su `using (true)`, kuri atiduoda visas eilutes visiems. Kodėl update ir delete tada praneša apie sėkmę, nieko nepakeisdami, aprašyta straipsnyje [How to enable RLS in Supabase: ką grąžina API](https://madsalt.tech/lt/blog/how-to-enable-rls-in-supabase/). Tikras politikas rašykite toje pačioje migracijoje:

```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);
```

Jei lentelė skirta būti vieša, pavyzdžiui, paskelbtų straipsnių sąrašas, vis tiek palikite RLS įjungtą ir parašykite vieną `select` politiką rolei `anon`, be rašymo teisių. Jei Data API niekada nenaudojate ir su Postgres kalbatės tik iš savo serverio, vietoj to pašalinkite `public` iš Exposed schemas, kaip Supabase prižiūrėtojai pasiūlė [tame pačiame issue](https://github.com/supabase/splinter/issues/82).

Kad naujos lentelės niekada nepradėtų be RLS, Supabase [event triggers vadove](https://supabase.com/docs/guides/database/postgres/event-triggers) yra trigeris, įjungiantis jį kiekvienoje schemoje `public` sukurtoje lentelėje. O nuo 2026 m. spalio 30 d. naujos lentelės pagal numatytuosius nustatymus negauna Data API teisių, todėl atsako `42501`, kol teisių nesuteikiate; tai aprašiau pastaboje [Supabase 42501 permission denied](https://madsalt.tech/lt/notes/supabase-42501-permission-denied/).

## Ko švarus rezultatas neįrodo?

Tai, kad RLS įjungtas, nieko nesako apie tai, ar politikos teisingos. Tame pačiame teste politika `using (true)` viešajam raktui vėl atidavė visas 3 eilutes, o šis lint tyli, kai tik RLS įjungtas. Tikrintuvas tam turi atskirą taisyklę, „Politikos, leidžiančios visas eilutes", o [kaip testuoju Supabase RLS](https://madsalt.tech/lt/blog/how-to-test-supabase-rls/) parodo, kaip kiekvieną politiką įrodyti su tikrais vartotojais. Politikos, nuo kurių galite pradėti, kiekviena išbandyta su tikrais vartotojais per API, pateiktos straipsnyje [Supabase RLS policy: pavyzdžiai, išbandyti per API](https://madsalt.tech/lt/blog/supabase-rls-policy-examples/).
