Como saber se o banco do meu app no Supabase está aberto (RLS checker)
19 de outubro de 2026 · 4 min de leitura
Para saber se o banco no Supabase está aberto, olhe o Security Advisor: ele lista tabela em public sem RLS. A chave anon é pública de propósito e só é segura com RLS ligado e política que não devolve toda linha. Teste só o seu projeto com a chave anon; o Faro Check vê a chave e não lê tabelas.
A chave anon (e a publishable nova, sb_publishable_...) foi feita para ir no navegador. Ela só é segura com o RLS ligado e com política que não entrega toda linha. A service_role e a secret sb_secret_... ignoram o RLS e ficam só no servidor. A documentação de chaves descreve isso em API keys. As chaves anon e service_role estão marcadas para sair de cena até o fim de 2026; a publishable ocupa o lugar da anon.
Passo a passo
-
Abra o Security Advisor. No painel, vá em Database e abra o Security Advisor. O lint
0013_rls_disabled_in_publicé um erro: tabela no schemapublicsem RLS. A documentação chama isso de tabela publicamente acessível, porque quem tem a URL do projeto consegue ler e gravar. O lint0007avisa o outro caso: a política existe, mas o RLS está desligado, então a política não vale. Fonte: Database Advisors. -
Ligue o RLS na tabela citada. O comando que a doc mostra é
alter table public.sua_tabela enable row level security. Com o RLS ligado e sem política, a chave do navegador deixa de ler e gravar pela API. Tabela criada no Dashboard já nasce com RLS. Tabela criada no SQL Editor precisa do comando. A página para ligar é Database, Policies: Securing your API. -
Teste só o seu projeto, só lendo. Use a URL e a chave anon (ou a publishable) do projeto que é seu. Não use a service_role. Troque o nome da tabela.
curl "https://SEU_PROJETO.supabase.co/rest/v1/SUA_TABELA?select=*&limit=1" \
-H "apikey: SUA_CHAVE" \
-H "Authorization: Bearer SUA_CHAVE"
A doc de rotas mostra os dois headers: Creating routes. A doc de chaves diz que publishable e secret novas não são JWT: vão no header apikey. Mandar essas chaves em Authorization: Bearer devolve Invalid JWT. A anon antiga é JWT, então o teste clássico manda os dois. Se a sua começa com sb_publishable_, mande só o apikey.
-
Leia o que voltou. JSON com linhas: a chave leu dado. Lista vazia (
[]): a tabela não tem linha, ou a política não devolveu nenhuma. Uma lista vazia sozinha não prova que está fechado. Erro de permissão, inclusive o código42501por grant ausente: a role não tem permissão na tabela. A doc de RLS diz que o grant é checado antes da política, e que política que não casa com nenhuma linha devolve resultado vazio: Row Level Security. -
Trate
using (true)como tabela aberta. Uma política de SELECT paraanoncomusing (true)casa com toda linha. O efeito, para a chave do navegador, é o mesmo de banco aberto. A mesma doc explica que a política é quem escolhe as linhas. Não coloqueservice_roleno front. -
Não peça para o scan ler a tabela. O Faro Check acha a chave anon e a URL do projeto no JavaScript e avisa para conferir o RLS. Ele não executa esse curl e não lê linhas. O insert que quebra está em new row violates row level security policy. Chave no arquivo público: como saber se a chave vazou. O restante, antes de divulgar: checklist antes de subir.
Prompt para colar
Copie e cole este prompt na ferramenta que você usa para criar o app
Não desligue o RLS e não use a service_role no browser. Em cada tabela do schema public com dado de pessoa, rode enable row level security. Políticas de SELECT, INSERT e UPDATE para authenticated devem usar auth.uid() na coluna do dono. Não crie política using (true) para anon em dado de usuário. Mostre o SQL antes de aplicar e não mexa em outras tabelas.
Perguntas frequentes
O que é um supabase rls checker?
É a conferência de RLS desativado e de tabela sem política certa. No painel, o Security Advisor lista o lint 0013_rls_disabled_in_public. No seu projeto, um GET só de leitura com a chave anon mostra se essa chave recebe linha.
RLS desativado no Supabase deixa a tabela aberta?
Se a tabela está no schema exposto, sem RLS, e a role anon tem grant, quem tem a URL e a chave lê e grava. Ligar o RLS sem política fecha o acesso pela API até você criar a política. Fonte: Row Level Security.
Lista vazia significa que o banco está fechado?
Não por si só. [] também aparece quando a tabela não tem linha. O Advisor é a confirmação no painel. Linhas no JSON significam que a chave leu dado.
Posso testar o projeto de outra pessoa?
Não. O curl acima é só no projeto seu, com a sua chave, e só leitura. O scan grátis do Faro Check também não lê tabela de ninguém: ele só vê a chave e a URL que o JavaScript já entrega.