// Guia prático
Isolamento multi-tenant em SaaS
O incidente que mais assusta cliente B2B
Vazar dado de um cliente para outro é o pior tipo de falha em SaaS B2B: quebra confiança de forma difícil de recuperar e costuma virar cláusula de contrato. E é fácil de introduzir quando o produto cresce rápido e uma query esquece o escopo do tenant.
Isolamento multi-tenant não é uma feature; é uma invariante que precisa valer em toda leitura e escrita.
Onde o isolamento vaza
O furo raramente é global; costuma ser uma rota que esqueceu o filtro.
- Query que filtra por id do recurso, mas não pelo tenant do usuário.
- Endpoint novo que copiou outro e herdou a falta de escopo.
- Cache ou busca (search) que mistura resultados de tenants.
- Job em background que roda sem o contexto do tenant certo.
Como garantir
Faça o escopo do tenant ser difícil de esquecer. Em vez de confiar que cada dev lembre de filtrar, force o filtro na camada de dados — com chave composta, escopo padrão no ORM ou Row-Level Security no banco.
- Chave composta (tenant_id + id) nas tabelas sensíveis.
- Escopo padrão no ORM/repositório, aplicado por padrão a toda query.
- Row-Level Security (RLS) no Postgres como rede de segurança no banco.
- Teste automatizado que tenta cross-tenant e espera negação.
Quando pedir leitura humana
Se você não consegue afirmar com confiança que toda rota carrega o escopo do tenant, esse é um caso clássico de Risk Review: uma leitura humana curta de 1 a 3 fluxos para dizer se o isolamento se sustenta ou se precisa de teste mais profundo antes de uma venda B2B.
Perguntas frequentes
RLS no banco é suficiente sozinho?
É uma rede de segurança forte, mas o ideal é defesa em camadas: escopo na aplicação + RLS no banco. RLS pega o que a aplicação esquecer, e a aplicação evita depender só do banco.
Como testo isolamento sem quebrar produção?
Crie dois tenants de teste e tente, com a sessão de um, ler e escrever recursos do outro. Um teste automatizado que espera negação em cross-tenant vira regressão permanente.
Vale para SaaS pequeno também?
Vale a partir do segundo cliente. O custo de introduzir isolamento cedo é baixo; o custo de vazar dado entre clientes é alto e difícil de reverter.