---
title: "Supabase \"RLS disabled in public\": ko tas nozīmē"
description: "Ko nozīmē Supabase Advisor kļūda rls_disabled_in_public, ko publiskā atslēga izdarīja ar šādu tabulu manā lokālajā testā un kā to droši labot."
url: "https://madsalt.tech/lv/notes/supabase-rls-disabled-in-public/"
author: "Denys Zaichenko"
author_url: "https://madsalt.tech/lv/about/"
language: "lv"
published: 2026-10-28
---

# Supabase "RLS disabled in public": ko tas nozīmē

Īsumā

"RLS Disabled in Public" (lint `0013_rls_disabled_in_public`, līmenis ERROR) nozīmē, ka tabulai atklātā shēmā ir izslēgts row level security, kamēr `anon` vai `authenticated` var veikt select. Manā lokālajā testā publiskā atslēga nolasīja visas 3 rindas no 3 no šādas tabulas un ievietoja jaunu ar `201 Created`. Ieslēdziet RLS, pievienojiet politiku katrai operācijai un pārbaudiet tiesības, visu vienā migrācijā.

Es izveidoju bezmaksas [Supabase drošības pārbaudi](https://madsalt.tech/lv/tools/supabase-security-check/), un tās pirmais noteikums "RLS izslēgts atklātajām tabulām" ir tas pats atradums, ko Supabase Security Advisor ziņo kā kļūdu. Tas ir biežākais robs, ko atrodu ar AI rīkiem veidotās lietotnēs, tāpēc lūk, ko tas nozīmē un ko tas pieļāva, kad es to atkārtoju.

## Ko nozīmē "RLS disabled in public"?

Security Advisor palaiž lint ar nosaukumu `rls_disabled_in_public`. Tā [SQL](https://github.com/supabase/splinter/issues/82) atzīmē tabulu, kad vienlaikus ir patiesas trīs lietas:

1. Tā ir parasta tabula ar izslēgtu row level security.
2. `anon` vai `authenticated` tai ir `SELECT`.
3. Tās shēma ir Data API sarakstā Exposed schemas, kas pēc noklusējuma ir `public`.

[Lint lapa](https://supabase.github.io/splinter/0013_rls_disabled_in_public/) to novērtē kā ERROR un pilnu create, read, update un delete piekļuvi internetā sauc par "kritiski nedrošu konfigurāciju" ("a critically unsafe configuration"). "Public" nosaukumā ir shēma, taču lint aptver katru atklāto shēmu, tāpēc uzmanību pelna arī papildu shēma šajā sarakstā; par to rakstīju piezīmē [Supabase exposed schemas](https://madsalt.tech/lv/notes/supabase-exposed-schemas/).

## Ko publiskā atslēga var izdarīt ar šādu tabulu?

Lokālā Supabase vidē (CLI 2.109.1, Postgres 17.6, PostgREST 14.14) izveidoju tabulu `orders` ar trim izdomātiem klientiem, ar tiesībām, kādas esošie projekti piešķir jaunām tabulām, un izslēgtu RLS. Tad izsaucu Data API ar publishable key, kā to dara pārlūks:

![Viena tabula: RLS izslēgts un ieslēgts. Ar publisko atslēgu, lokāls Supabase, 3 izdomātu pasūtījumu rindas. RLS izslēgts, lasīšana: Publishable key → orders, RLS izslēgts → 3 no 3 rindām; RLS izslēgts, ievietošana: Publishable key → orders, RLS izslēgts → 201 Created; RLS ieslēgts, politikas vēl nav: Publishable key → orders, RLS ieslēgts → 0 rindu.](https://madsalt.tech/charts/lv/supabase-rls-disabled-in-public.svg)

*Mana reprodukcija lokālā Supabase vidē, 2026. gada 23. oktobris.*

| Pieprasījums ar publishable key       | RLS izslēgts                                  | RLS ieslēgts, politikas nav                               |
| ------------------------------------- | --------------------------------------------- | --------------------------------------------------------- |
| `GET /rest/v1/orders?select=*`        | `200`, visas 3 rindas ar vārdiem un e-pastiem | `200`, `[]`                                               |
| `POST /rest/v1/orders` ar jaunu rindu | `201 Created`                                 | `401`, 42501 "new row violates row-level security policy" |

Ikviens, kas atver jūsu lietotni, var nokopēt publishable key no lapas. Ja RLS ir izslēgts, šī atslēga ir lasīšanas un rakstīšanas caurlaide uz šo tabulu.

## Kā to labot, nesalaužot lietotni?

Vienkārši ieslēdzot RLS, tabula lietotnei neatgriež neko, jo politikas vēl nav. Tieši šajā tukšajā ekrānā cilvēki un AI rīki pievieno politiku ar `using (true)`, kas visas rindas atdod ikvienam. Kāpēc update un delete tad ziņo par veiksmi, neko nemainot, ir rakstā [Enable RLS in Supabase: ko tabula atgriež pēc tam](https://madsalt.tech/lv/blog/how-to-enable-rls-in-supabase/). Rakstiet īstās politikas tajā pašā migrācijā:

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

Ja tabula ir paredzēta publiskai lietošanai, piemēram, publicēto rakstu saraksts, RLS tāpat atstājiet ieslēgtu un uzrakstiet vienu `select` politiku lomai `anon`, bez rakstīšanas tiesībām. Ja Data API nekad neizmantojat un ar Postgres runājat tikai no sava servera, tā vietā noņemiet `public` no Exposed schemas, kā Supabase uzturētāji ieteica [tajā pašā issue](https://github.com/supabase/splinter/issues/82).

Lai jaunas tabulas nekad nesāktos bez RLS, Supabase [event triggers ceļvedī](https://supabase.com/docs/guides/database/postgres/event-triggers) ir trigeris, kas ieslēdz to katrai tabulai, kas izveidota shēmā `public`. Un no 2026. gada 30. oktobra jaunas tabulas pēc noklusējuma nesaņem Data API tiesības, tāpēc tās atbild ar `42501`, kamēr tiesības nepiešķirat; to aplūkoju piezīmē [Supabase 42501 permission denied](https://madsalt.tech/lv/notes/supabase-42501-permission-denied/).

## Ko tīrs rezultāts nepierāda?

Tas, ka RLS ir ieslēgts, neko nesaka par to, vai politikas ir pareizas. Tajā pašā testā politika `using (true)` publiskajai atslēgai atkal deva visas 3 rindas, un šis lint paliek kluss, tiklīdz RLS ir ieslēgts. Pārbaudei tam ir atsevišķs noteikums, "Politikas, kas atļauj visas rindas", un [kā es testēju Supabase RLS](https://madsalt.tech/lv/blog/how-to-test-supabase-rls/) parāda, kā pierādīt katru politiku ar īstiem lietotājiem. Politikas, ar kurām sākt, katra palaista pret īstiem lietotājiem caur API, ir rakstā [Supabase RLS policy piemēri, pārbaudīti caur API](https://madsalt.tech/lv/blog/supabase-rls-policy-examples/).
