← Guias
4 min de leitura

A chave anon do Supabase no site é segura? Sim — com uma condição

A chave anon (ou sb_publishable) foi feita para ficar no navegador. O que a torna perigosa é a tabela sem RLS. A diferença para a service_role, na prática.

Sim: a chave anon — ou a nova sb_publishable_… — foi feita para ir no código do site. Ela não é segredo, e esconder não adianta: qualquer visitante a vê nas ferramentas do navegador. O Supabase foi desenhado para isso.

A condição: RLS em todas as tabelas

A chave pública diz "sou um visitante deste projeto". O que ela pode fazer depende das regras de cada tabela, a RLS. Com RLS ligada e políticas por usuário, a chave pública só alcança o que aquele visitante (ou usuário logado) pode ver. Sem RLS, a mesma chave lê e altera a tabela inteira.

-- tabelas abertas (rowsecurity = false)
select tablename from pg_tables
where schemaname = 'public' and not rowsecurity;

A chave que NUNCA pode ir para o site

  • anon / sb_publishable_…: pública. Pode ir no front. Respeita a RLS.
  • service_role / sb_secret_…: secreta. Ignora a RLS e faz tudo no banco. Só no servidor (Edge Function, rota de API).

Um jeito de conferir: a service_role antiga é um JWT com "role": "service_role" dentro. Se essa palavra aparecer nos arquivos do site publicado (F12 → Sources → busca), troque a chave agora no painel do Supabase.

Resumo: chave pública no site é normal. Tabela sem RLS ou service_role no site é que é o problema.

Dicas curtas de segurança para quem cria com IA: siga @npx_vibedefender no Instagram.