Visi straipsniai

Saugumas

Row Level Security (RLS)

Kaip apsaugoti duomenis bazės lygyje, kad kiekvienas matytų tik tai, ką jam leidžiama.

7 min. skaitymo

Kodėl RLS svarbu

Be RLS bet kuris prisijungęs vartotojas, turintis viešąjį raktą, gali užklausti visą lentelę. RLS (Row Level Security) leidžia nustatyti taisykles, kurios eilutės kuriam vartotojui matomos ar keičiamos – ir tai galioja pačioje duomenų bazėje, ne tik kode.

AIPamokos.lt RLS užtikrina, kad studentas matytų tik savo registracijas ir kreditus, o mokytojas – tik savo pamokų studentus.

Politikos (policies)

Politika – tai taisyklė lentelei: kas gali SELECT, INSERT, UPDATE ar DELETE. Pavyzdžiui, „studentas mato tik tas registracijas, kur student_id = auth.uid()“.

  • USING – kontroliuoja, kurios eilutės matomos/keičiamos.
  • WITH CHECK – kontroliuoja, ką galima įrašyti ar atnaujinti.
  • auth.uid() – grąžina prisijungusio vartotojo ID.

Dažna klaida: rekursija

Jei politika vienoje lentelėje užklausia kitą lentelę, kurios politika vėl užklausia pirmąją, gausi „infinite recursion“ (42P17) klaidą. Sprendimas – iškelti tikrinimą į SECURITY DEFINER funkciją, kuri apeina RLS ir nutraukia ciklą.

Geros praktikos

  • Įjunk RLS kiekvienai lentelei su privačiais duomenimis.
  • Jautrius veiksmus (kreditų pridėjimą, išmokas) daryk per SECURITY DEFINER funkcijas.
  • Testuok politikas kaip skirtingi vartotojai, ne tik kaip admin.

Nori išmokti tai praktiškai?

Rask AI mokytoją ir pereik šią temą gyvai per pamoką.

Pradėk mokytis