RLS no Supabase
Atualizado em 6 de novembro de 2026 · Todos os guias
O Row Level Security (RLS) é a regra que o próprio banco aplica em cada leitura e escrita, como um filtro automático em toda consulta. No Supabase, ele é o que impede um visitante de ler os dados de todos os seus clientes com a chave pública que vai no app.
1. Ache as tabelas sem RLS
No Supabase, abra o SQL Editor e rode:
select tablename from pg_tables where schemaname = 'public' and rowsecurity = false;
Toda tabela que aparecer está sem a proteção.
2. Ligue o RLS
alter table public.pedidos enable row level security;
Troque pedidos pelo nome da sua tabela. Segundo a documentação do Supabase, com o RLS ligado e nenhuma regra criada, a API não devolve nenhum dado para a chave pública. Isso pode "quebrar" telas do app até você criar as regras, então faça primeiro num ambiente de teste.
3. Crie a regra por usuário
create policy "cada um vê os próprios pedidos" on public.pedidos for select to authenticated using ( (select auth.uid()) = user_id );
Repita para insert, update e delete conforme o app precisar. Em update, use também with check para o usuário não conseguir passar a linha para outra pessoa.
4. Cuidado com as colunas de permissão
Se a tabela de perfis tem colunas como role, plano ou saldo, uma regra de update ampla deixa o usuário se promover a administrador. Tire essas colunas do alcance do usuário (outra tabela ou só o servidor altera).
5. Confira de verdade
- Saia da conta e tente carregar a tela que lista dados: não pode aparecer nada privado.
- Com duas contas, tente abrir o registro de uma logado na outra.
- Lembre que a chave secreta (
service_role) ignora o RLS: ela nunca vai para o navegador.
Se você usa IA para corrigir, peça para ela mostrar o SQL antes de rodar e entregar junto o SQL para desfazer.
O scan grátis do Scanblind testa chaves expostas, arquivos públicos, cabeçalhos, e-mail e-mail, subdomínios e outros riscos comuns, sem login, e entrega o prompt pronto para a sua IA corrigir.
Escanear meu app grátis