Pular para o conteúdo
🏭 GROUPS

Groups — SaaS Factory.

Provisione um banco Postgres isolado por cliente em uma chamada de API. Feito para ISVs B2B que precisam de isolamento real de dados.

O que é um Group

Um Group é um par de (template + conjunto de tenants). Você define uma vez o schema do banco — tabelas, funções, políticas RLS — e o SuperDB replica isso para cada novo tenant que você provisiona via API.

Cada tenant recebe:

  • Um schema Postgres dedicado (ex: proj_acme) — fisicamente isolado
  • Um JWT secret próprio — tokens de um tenant não funcionam em outro
  • Um par de API keys (anon + service role) únicas
  • As 5 tabelas de auth clonadas do template
  • Um role Postgres dedicado com GRANTs corretos
💡

Analogia: pense num Group como um molde de bolo. Você cria o molde uma vez (template) e usa para fazer quantos bolos quiser (tenants). Cada bolo é idêntico na estrutura, mas completamente separado na massa.

Quando usar Groups

Use Groups quando você é um ISV (Independent Software Vendor) que vende um SaaS B2B onde:

  • Cada cliente (empresa, escola, clínica, escritório) tem dados que nunca podem se misturar com os de outro cliente
  • Você precisa de conformidade com LGPD em nível de armazenamento — não apenas via RLS
  • Seus clientes exigem poder demonstrar isolamento físico de dados (auditoria, saúde, financeiro, jurídico)
  • Você quer provisionar novos clientes programaticamente, sem intervenção manual

Quando NÃO usar Groups

Groups não são a solução para todos os casos. Use um projeto único com RLS quando:

  • Você tem um app B2C onde todos os usuários compartilham o mesmo produto (rede social, marketplace, e-commerce)
  • A separação de dados por Row Level Security é suficiente para seus requisitos de compliance
  • Você não precisa dar aos clientes a garantia de isolamento físico de banco
  • O overhead operacional de múltiplos schemas não justifica o benefício
⚠️

RLS vs Groups: RLS é uma política de segurança em nível de linha dentro de um mesmo schema. Um bug no RLS pode expor dados de outros usuários. Groups usa isolamento físico em nível de schema — um bug de aplicação não atravessa schemas Postgres.

Arquitetura: schema-per-tenant

O SuperDB usa o padrão schema-per-tenant do Postgres. Cada tenant é um namespace separado dentro do mesmo servidor Postgres, com:

estrutura no Postgres
-- Projeto template (você modela aqui)
proj_erp_template
  ├── pacientes
  ├── medicos
  ├── atendimentos
  ├── auth_users
  └── auth_sessions

-- Tenant A (provisionado automaticamente)
proj_clinica_sao_paulo
  ├── pacientes       ← cópia exata do template
  ├── medicos
  ├── atendimentos
  ├── auth_users      ← usuários ISOLADOS do tenant A
  └── auth_sessions

-- Tenant B (provisionado automaticamente)
proj_clinica_campinas
  ├── pacientes       ← dados COMPLETAMENTE separados do tenant A
  ├── medicos
  └── ...

Queries entre schemas são fisicamente bloqueadas — o role de serviço de cada tenant só tem acesso ao próprio schema.

LGPD-friendly por design

O isolamento por schema facilita a conformidade com a LGPD em pontos críticos:

  • Art. 46 — Segurança: dados de clientes diferentes estão em espaços físicos separados no banco
  • Art. 18 — Direito à exclusão: para apagar todos os dados de um cliente, basta DROP SCHEMA proj_acme CASCADE — uma operação atômica e completa
  • Art. 37 — Registro de operações: logs de acesso por schema são naturalmente segregados
  • Portabilidade: exportar dados de um cliente específico é um pg_dump --schema=proj_acme

Ciclo de vida: Group → Tenants → Deploy

fluxo completo
1. Você cria um projeto template no dashboard
   └── Modela as tabelas no SQL Editor
   └── Define as policies RLS
   └── Testa localmente

2. Você cria um Group no Admin UI
   └── Seleciona o projeto template
   └── Gera a API Key do Group (guarde! só aparece uma vez)

3. Seu backend chama POST /groups/v1/:id/tenants
   └── quando um novo cliente se cadastra no SEU SaaS

4. SuperDB responde em ~1-2s com:
   └── tenant.id + tenant.slug
   └── anon_key do tenant (vai pro frontend do cliente)
   └── service_role_key do tenant (fica no seu backend)

5. Você guarda as keys no banco do SEU app
   └── e usa elas nas queries desse cliente específico

Modelo de billing

O billing de Groups está planejado para versões futuras do SuperDB. Atualmente, Groups está disponível nos planos Scale e Enterprise.

  • Scale (R$ 499/mês): até 50 tenants ativos
  • Enterprise: tenants ilimitados, SLA customizado, suporte dedicado

Entre em contato em contato@superdb.com.br para discutir seu caso de uso.

Próximos passos

Essa página ajudou?