Se você recebeu um email “Security vulnerabilities detected in your Supabase projects” provavelmente algumas tabelas do seu supabase estão acessíveis publicamente
O erro mais comum é “Row-Level Security is not enabled.” ou também conhecido como “rls_disabled_in_public“
Este erro indica que uma tabela no seu banco de dados PostgreSQL está vulnerável. Aqui está o resumo do problema e como resolvê-lo:
* Lembre-se de alterar o nome da TABELA
?? O Problema: RLS Desativado
O RLS (Row Level Security) é o mecanismo que controla quais linhas um usuário pode ver ou editar. Quando você usa ferramentas como o PostgREST (ou Supabase), as tabelas no schema public ficam expostas via API.
Se o RLS não está ativado na tabela public.TABELA:
- Exposição de Dados: Qualquer pessoa com a URL da sua API pode, em teoria, ler todos os dados da tabela.
- Falta de Controle: Sem políticas (policies), o banco de dados não sabe distinguir quais dados pertencem a qual usuário.
?? Como Corrigir
Para resolver isso, você precisa seguir dois passos: habilitar o RLS e criar políticas de acesso.
1. Habilitar o RLS
Execute este comando no seu editor SQL para “trancar as portas” da tabela:
SQL
ALTER TABLE public.TABELA ENABLE ROW LEVEL SECURITY;
2. Criar Políticas de Acesso (Exemplos)
Uma vez ativado, ninguém verá nada (nem mesmo você via API) a menos que você defina uma regra. Escolha a que melhor se adapta ao seu caso:
- Opção A: Permitir leitura apenas para usuários autenticados
SQL
CREATE POLICY "Permitir leitura para usuários autenticados"
ON public.TABELA
FOR SELECT
TO authenticated
USING (true);
SQL
CREATE POLICY "Usuários veem apenas seus próprios dados"
ON public.TABELA
FOR SELECT
USING (auth.uid() = user_id);
? Recomendação
Sempre que criar uma nova tabela em um schema público, a primeira ação deve ser o comando ENABLE ROW LEVEL SECURITY. É melhor começar com o acesso totalmente bloqueado e abrir as permissões conforme a necessidade do que deixar os dados expostos por padrão.