// docs / baas security / supabase rls scanner
Sikana RLS Supabase: chọta tebụl na-enweghị ma ọ bụ nke gbajiri agbaji nchekwa larịị ahịrị
Nchekwa larịị ahịrị (RLS) bụ naanị ihe na-eguzo n'etiti data ndị ahịa gị na ịntanetị mgbe ị na-eziga ngwa nke Supabase na-akwado. Ngwa ihe nkuzi koodu AI na-emepụta koodu nwere ụdị RLS nke na-achịkọta, na-eziga, ma na-ezipụ data n'enweghị uzu — tebụl emepụtara na-enweghị RLS akwadoro, atumatu na-agụ mana enweghị nke ọ bụla na-amachi, ihe ntule na-atụnyere ogidi na onwe ya. Edemede a na-egosi ihe sikana RLS Supabase nwere ike igosi site n'èzí, ụdị RLS gbajiri agbaji anọ na-egosi na ngwa vibe-coded, na otu esi enyocha mbubata gị n'ime nkeji.
Ihe nyocha RLS nke èzí nwere ike igosi
Nyocha RLS na-anaghị eme ihe na-agba megide PostgREST endpoint nke Supabase na-ekpughe na https://[project].supabase.co/rest/v1/. Ọ na-eji naanị igodo anon a na-ebipụta — otu igodo nchọgharị gị na-eji — ma nyochaa metadata ndepụta tebụl, ọgụgụ na-enweghị aha, na ide na-enweghị aha. Ọ dịghị mgbe ọ na-enye njirimara dị ka onye ọrụ ma ọ dịghị emetụ ihe ruru eru nke ọrụ-eke aka. Ihe ọ bụla ọ nwere ike ime, onye ọ na-awakpo na-enweghị nkwenye n'ịntanetị nwere ike ime.
Site n'èzí nke ọdụ data, sikana nwere ike kwado ndị a na nkwenye dị elu:
- A gbanyụrụ RLS na tebụl. PostgREST na-eweghachi ahịrị maka
SELECTna-enweghị aha mgbe RLS gbanyụrụ ma ọ bụ mgbe iwu na-enye ya ohere. Ọnọdụ ọ bụla bụ nchọpụta. - Ọrụ na-enweghị aha nwere ike ịdepụta tebụl.
GET /rest/v1/nwere igodo anon na-eweghachi nhazi OpenAPI maka tebụl ọ bụla nke ọrụanonnwere ihe ọ bụla. Ngwa AI mepụtara na-enyeUSAGEna schema naSELECTna tebụl ọ bụla, nke na-ekpughe map schema zuru oke ọbụlagodi mgbe RLS na-egbochi ọgụgụ n'ezie. - Ọrụ na-enweghị aha nwere ike itinye. Nyocha
POSTnwere amụma na ọdịdị ogidi ga-aga nke ọma ma ọ bụrụ na RLS enweghị iwuINSERTna-egbochi ya — ọbụlagodi maSELECTkpọchiri. - Igodo ọrụ-eke dị n'ime ngwakọta nchọgharị. N'akụkụ RLS: ọ bụrụ na sikana achọta
SUPABASE_SERVICE_ROLE_KEYma ọ bụ JWT ọ bụla nwererole: service_rolen'ime ngwakọta JavaScript, RLS abaghị uru — onye ji igodo ahụ na-agafe iwu ọ bụla.
Ihe nyocha èzí enweghị ike igosi
Kwuo eziokwu maka oke nke sikana. Nyocha RLS èzí enweghị ike ịgụ tebụl pg_policies gị, faịlụ mbugharị gị, ma ọ bụ ihe ntule kpọmkwem nke iwu ọ bụla. Ọ na-amata site na omume akpa ojii, nke pụtara na ọ ga-akọ nchọpụta mgbe ụfọdụ nke ga-abụ data ọha ebumnobi (tebụl akwụkwọ akụkọ azụmahịa, katalọgụ ngwaahịa ọha). Akụkọ FixVibe na-akara ndị a dị ka nkwenye etiti mgbe sikana enweghị ike ịkọwapụta ebumnobi — leghachi aha tebụl ma kpebie.
Ụdị RLS gbajiri agbaji anọ nke ngwa AI na-emepụta
Mgbe ị tụụrụ Cursor, Claude Code, Lovable, ma ọ bụ Bolt na Supabase, otu ụdị RLS gbajiri agbaji anọ na-apụta n'ọtụtụ puku ngwa. Nke ọ bụla na-agafe nyocha ụdị, na-achịkọta, ma na-eziga:
Ụdị 1: Etinyebeghị RLS
Ụzọ ọdịda kachasị. Mbugharị na-emepụta tebụl mana onye mmepe (ma ọ bụ ngwa AI) na-echezọ ALTER TABLE ... ENABLE ROW LEVEL SECURITY. PostgREST na-eji obi ụtọ na-eweta tebụl niile nye onye nwere igodo anon. Ndozi: ALTER TABLE public.[name] ENABLE ROW LEVEL SECURITY; ALTER TABLE public.[name] FORCE ROW LEVEL SECURITY;. FORCE abụghị nhọrọ — na-enweghị ya, onye nwe tebụl (na ọrụ ọ bụla nwere ikike inwe tebụl) na-agafe RLS.
ALTER TABLE public.[name] ENABLE ROW LEVEL SECURITY;
ALTER TABLE public.[name] FORCE ROW LEVEL SECURITY;Ụdị 2: RLS akwadoro, enweghị iwu
Ọdịda dị nro karịa. A na-akwado RLS mana edeghị iwu. Ndabara na PostgreSQL bụ jụ, ya mere ndị ọrụ enwere njirimara anaghị ahụ ihe ọ bụla — onye mmepe na-agbakwunye USING (true) ka ngwa rụọ ọrụ, nke na-enye onye ọ bụla ohere ịgụ ihe niile. Ndozi: dee iwu nke auth.uid() na-akọwapụta: CREATE POLICY "select_own" ON public.[name] FOR SELECT USING (auth.uid() = user_id); na iwu INSERT/UPDATE/DELETE dabara adaba.
CREATE POLICY "select_own"
ON public.[name]
FOR SELECT
USING (auth.uid() = user_id);Ụdị 3: Iwu na-atụnyere ogidi na onwe ya
A copy-paste artefact. The developer writes <code>USING (user_id = user_id)</code> — which is always true — instead of <code>USING (auth.uid() = user_id)</code>. Type-checks pass; the policy permits every row. <strong>Fix:</strong> always compare a column to a function call (<code>auth.uid()</code>, <code>auth.jwt()->>'org_id'</code>, etc.), never to itself or to a constant.
Ụdị 4: Iwu na SELECT mana ọ bụghị na INSERT/UPDATE
Onye mmepe na-akpọchi ọgụgụ mana echefuru ide. Iwu RLS bụ kwa-iwu. FOR SELECT na-echebe naanị ọgụgụ; onye ahịa na-enweghị aha nwere ike INSERT ma ọ bụrụ na enweghị iwu na-egbochi ya. Ndozi: dee iwu kwa iwu, ma ọ bụ jiri FOR ALL nwere nkebi ahịrị USING na WITH CHECK doro anya.
Etu sikana RLS Supabase FixVibe si arụ ọrụ
Nyocha baas.supabase-rls na-agba na nzọụkwụ atọ, nke ọ bụla nwere ọkwa nkwenye doro anya:
- Nzọụkwụ 1 — akara akara. Sikana na-akpụgharị ngwa ezigara, na-atụgharị ngwakọta JavaScript ya, ma na-ewepụta URL ọrụ Supabase na igodo anon site na nhazi mgbe ọ na-agba ọsọ. Enweghị atụmatụ DNS, enweghị mmanye — ọ na-agụ ihe nchọgharị na-agụ.
- Nzọụkwụ 2 — nchọpụta schema. Otu
GET /rest/v1/nwere igodo anon na-eweghachi nhazi OpenAPI maka tebụl ọ bụla nke ọrụ anon nwere ike ịhụ. Sikana na-edekọ aha tebụl mana adịghị agụ data ahịrị na nzọụkwụ a. - Nzọụkwụ 3 — nyocha agụ na ede. Maka tebụl ọ bụla achọpụtara, sikana na-enye otu
SELECTna-enweghị aha nwerelimit=1. Ọ bụrụ na ahịrị laghachi, RLS na-enye ohere. Sikana na-akwụsị ebe ahụ — ọ dịghị edepụta ahịrị, ọ dịghị peejị, ma ọ dịghị emezi data. Nyocha INSERT na-eche n'okpuru nkwenye nwetara ngalaba na nhọrọ doro anya; ha anaghị agba megide ihe e nwetabeghị nkwenye.
Nchọpụta ọ bụla na-eziga na URL arịrịọ kpọmkwem, ọnọdụ azịza, ọdịdị azịza (naanị isi), na aha tebụl. Ntugharị ndozi AI na ala nke nchọpụta bụ ngọngọ SQL detịnye-mapụta nke ị na-agba na nhazi SQL Supabase.
Ihe ị ga-eme mgbe sikana chọtara ihe
Nchọpụta RLS ọ bụla bụ ihe ngwa ngwa mgbe ọ na-agba ọsọ. Endpoint PostgREST ọha na-anata nyocha site n'aka ndị na-awakpo n'ime nkeji. Usoro nrụzigharị bụ ihe mmemme:
- Nyochaa tebụl ọ bụla. Gbaa
SELECT schemaname, tablename, rowsecurity FROM pg_tables WHERE schemaname = 'public';na nhazi SQL Supabase. Ahịrị ọ bụla nwererowsecurity = falsebụ nsogbu. - Mee ka RLS rụọ ọrụ na tebụl ọha ọ bụla. Ndabara gaa na
ENABLE ROW LEVEL SECURITYnaFORCE ROW LEVEL SECURITYna tebụl ọ bụla emepụtara — mee ya nhazi mbugharị. - Dee iwu kwa iwu. Ejila
FOR ALL USING (true). Dee iwu doro anya maka SELECT, INSERT, UPDATE, DELETE — nke ọ bụla na-akọwa naauth.uid()ma ọ bụ ogidi org-id sitere naauth.jwt(). - Kwado na akaụntụ nke abụọ. Debanye aha dị ka onye ọrụ dị iche, gbalịa ịgụ ndekọ onye ọzọ site na REST API kpọmkwem. Ọ bụrụ na azịza bụ
200, iwu gbajiri agbaji. - Nyocha ọzọ. Mgbe etinyere ndozi, gbaa nyocha FixVibe ọzọ megide otu URL. Nchọpụta
baas.supabase-rlsga-ehichapụ.
-- Audit every table for missing RLS. Run in the Supabase SQL editor.
SELECT schemaname, tablename, rowsecurity
FROM pg_tables
WHERE schemaname = 'public'
ORDER BY rowsecurity, tablename;Etu nke a si atụnyere sikana ndị ọzọ
Ọtụtụ ngwá ọrụ DAST n'ozuzu (Burp Suite, OWASP ZAP, Nessus) amaghị ihe PostgREST bụ. Ha ga-akpụgharị ngwa gị, leghara ụzọ /rest/v1/ anya, ma na-akọ akụkọ na ibe HTML ha ghọtara. Snyk na Semgrep bụ ngwá ọrụ nyocha kpụ ọkụ — ha na-achọta faịlụ mbugharị na repo gị nke enweghị ọkpụkpọ RLS, mana ha enweghị ike igosi na ọdụ data ezigara ahaziri nke ọma. FixVibe nọrọ n'oghere: na-anaghị eme ihe, mara BaaS, lekwasịrị anya na ihe onye na-awakpo na-enweghị nkwenye nwere ike igosi site na URL ọha.
Ajụjụ a na-ajụkarị
Sikana ga-agụ ma ọ bụ gbanwee data m?
Mba. Nyocha na-anaghị eme ihe na-enye opekata mpe otu SELECT ... limit=1 kwa tebụl achọpụtara iji kwado ma RLS na-enye ohere ọgụgụ na-enweghị aha. Sikana na-edekọ ọdịdị azịza, ọ bụghị ọdịnaya ahịrị. Nyocha INSERT, UPDATE, na DELETE na-eche n'okpuru nkwenye nwetara ngalaba ma ọ dịghị mgbe na-agba megide ihe e nwetabeghị nkwenye.
Nke a ọ na-arụ ọrụ ma ọ bụrụ na ọrụ Supabase m na-akwụsịtụ ma ọ bụ na ngalaba omenala?
Ọrụ akwụsịtụrụ na-eweghachi 503 na arịrịọ ọ bụla — sikana na-akọ ọrụ ahụ dị ka enweghị ike iru. Ngalaba omenala na-arụ ọrụ ma ọ bụrụ na ngwa ezigara ka na-ebu SDK onye ahịa Supabase na nchọgharị; sikana na-ewepụta URL ọrụ na ngwakọta ụzọ ọ bụla.
Gịnị ma ọ bụrụ na e gbanwere igodo anon m ma ọ bụ igodo nbipụta m gbanwere?
Mee nyocha ọzọ. Sikana na-ewepụtaghachi igodo na ngwakọta ugbu a na nyocha ọ bụla. Mgbanwe na-emeghị ka akụkọ gara aga ghara ịdị irè, ọ bụghị ọnọdụ iwu nke ọdụ data.
Sikana ọ na-enyocha ụdị igodo nbipụta Supabase ọhụrụ (<code>sb_publishable_*</code>)?
Ee. Ndị nchọpụta na-amata ma JWT anon ochie ma igodo sb_publishable_* ọhụrụ ma na-emeso ha otu — ha abụọ bụ maka iji bụrụ ọha ma ha abụọ na-ahapụ RLS dị ka naanị ahịrị nchekwa.
Nzọụkwụ na-esote
Gbaa nyocha FixVibe efu megide URL mmepụta gị — nyocha baas.supabase-rls na-arụ ọrụ na atụmatụ ọ bụla gụnyere ọkwa efu. Maka ọgụgụ miri emi maka ihe ọzọ nwere ike isi na ọrụ Supabase pụta, hụ Igodo ọrụ-eke Supabase ekpughere na JavaScript na Akwụkwọ ndepụta nchekwa ihe nchekwa Supabase. Maka echiche zuru ezu na ndị niile na-eweta BaaS, gụọ Sikana nhazi adịghị mma BaaS.
