Voltar para o Blog
Vibe Coding20 / 40
  1. 01O que é vibe coding (e o que não é)
  2. 02De escrever código a dirigir a intenção
  3. 03O ciclo: contexto → plano → geração → revisão
  4. 04O arsenal: visão geral do nosso stack de IA
  5. 05Quando não usar vibe coding
  6. 06Da ideia ao protótipo em horas
  7. 07Claude para brainstorm de produto e PRD
  8. 08Claude Artifacts para mockups instantâneos
  9. 09Lovable: do prompt ao app funcional
  10. 10Google AI Studio: prototipando com Gemini
  11. 11Lovable × Claude × Google Studio: quando usar cada um
  12. 12Claude Code: o par de programação que conhece o monorepo
  13. 13Anatomia de um bom prompt de engenharia
  14. 14Plan mode: planejar antes de gerar
  15. 15Skills e slash commands (/investigate, /review, /ship)
  16. 16Refactors e migrations em massa
  17. 17Debugging com IA: do stack trace à causa raiz
  18. 18Supabase: a espinha dorsal de dados
  19. 19Modelagem com Drizzle ORM
  20. 20RLS na prática: a regra que não tem exceção
  21. 21Migrations SQL à mão e o drift DB↔Drizzle
  22. 22Auth com Google OAuth no Supabase
  23. 23Realtime, Storage e o resto do Supabase
  24. 24Trigger.dev: o piloto automático
  25. 25Seu primeiro job agendado
  26. 26Workflows com retry e observabilidade
  27. 27IA em background: resumos e narrativas
  28. 28Deploy do Trigger.dev e as pegadinhas
  29. 29Evolution API: WhatsApp como canal de produto
  30. 30Instância por usuário e gestão centralizada
  31. 31IA gerando resumos de conversa
  32. 32Boas práticas e armadilhas no WhatsApp
  33. 33Integrando APIs de terceiros com IA
  34. 34Anthropic SDK: Claude dentro do produto
  35. 35Resend: e-mail transacional que chega
  36. 36Google Analytics, Search Console e Ads
  37. 37Rate limit, retry, idempotência e secrets
  38. 38GitHub: CI/CD e AI Code Review como portão de qualidade
  39. 39Deploy no Google Cloud Run
  40. 40A cultura por trás do vibe coding (e o futuro)
Vibe CodingParte 20 de 40

RLS na prática: a regra que não tem exceção

2 min de leitura
Compartilhar
Vibe Coding

Se tem um post desta série que é pra ler duas vezes, é este. Row Level Security (RLS) é a regra de segurança mais importante do nosso banco — e a que vibe coding mais ameaça, porque é fácil a IA criar uma tabela e esquecer dela. Aqui não tem "depois eu ligo".

Por que RLS é obrigatório aqui

O Supabase é PostgreSQL com API automática (PostgREST). Isso significa que a chave anon/authenticated expõe via API qualquer tabela que não tenha RLS. Traduzindo:

Tabela sem RLS = vazamento de dados. Ponto.

Não é teoria. É a porta dos fundos aberta pra qualquer um com a chave pública ler sua tabela inteira.

As três regras da casa

1. Ative RLS em toda tabela

ALTER TABLE <tabela> ENABLE ROW LEVEL SECURITY; no mesmo migration que cria a tabela. Vale pra db:push, migration à mão ou criação no Supabase Studio. Sem "por enquanto".

2. Defina policies explícitas

RLS sem policy = deny-all (ninguém acessa via API). Então:

  • Tabela exposta à API → precisa de policy explícita.
  • Tabela interna (cache, log, job) → ativa RLS e fica sem policy de propósito (deny-all intencional).

3. Bloqueie no review

PR que cria tabela sem ENABLE ROW LEVEL SECURITY deve ser barrado. É critério de merge, não sugestão.

Onde o vibe coding precisa de coleira

A IA é ótima pra gerar tabela — e é exatamente por isso que o risco existe: ela gera a tabela e, se você não exigir, não gera o RLS. Por isso:

  • Inclua RLS no prompt. "Cria a tabela X com RLS habilitado e policy de leitura por organização."
  • Revisão dobrada em qualquer coisa de schema. Erro de RLS não é bug, é incidente de segurança.
  • Confie no CLAUDE.md. Ele documenta a regra, então o Claude Code já entra avisado — mas a responsabilidade final de checar é sua.

Um lembrete honesto: temos dívida aqui

Auditoria interna apontou tabelas e schemas sem RLS no nosso próprio banco — há um trabalho de remediação em andamento. Ou seja: nem nós estamos 100%. Isso reforça, não enfraquece, a regra. Toda tabela nova nasce certa pra não aumentar a dívida.

⚠️ Armadilha #20: deixar a IA criar tabela e seguir a vida sem checar o RLS. Funciona em dev, vaza em produção. A pergunta depois de toda tabela nova é uma só: "o RLS está ligado e a policy está certa?".

Próximo da série: #21 — Migrations SQL à mão e o drift DB↔Drizzle.

Curtiu como a gente pensa?

É assim que trabalhamos todo dia.

Se esse jeito de pensar é o seu, vem construir com a gente — dá uma olhada nas vagas abertas.

Ver vagas