Banco de Dados e Multi-tenancy
A fundação de dados do Lunno foi projetada para resolver o maior desafio de qualquer SaaS B2B Enterprise: garantir o isolamento absoluto dos dados sem sacrificar a escalabilidade da infraestrutura.
Para atingir este objetivo, o Lunno utiliza PostgreSQL (via Supabase) operando sob o modelo de Shared Database, Isolated Rows (Banco Compartilhado, Linhas Isoladas).
Security First: O isolamento não é feito apenas via código na aplicação (onde um bug de desenvolvedor poderia causar um vazamento). A restrição de acesso é garantida no nível mais baixo e seguro: o motor do banco de dados.
Row Level Security (RLS)
O “segredo” da nossa arquitetura Multi-tenant é o uso extensivo de Row Level Security (RLS) nativo do PostgreSQL.
Em um sistema tradicional, a API backend faz uma query como SELECT * FROM evidncias WHERE workspace_id = 1. Se o desenvolvedor esquecer o WHERE, os dados de todos os clientes vazam.
No Lunno, as tabelas possuem políticas criptográficas. O banco de dados só retorna a linha se o Token de Autenticação (JWT) que fez o pedido pertencer ao mesmo Workspace daquela linha de dado.
Exemplo de Política de Segurança (Policy)
O código abaixo ilustra como o banco de dados do Lunno bloqueia acessos indevidos antes mesmo da informação chegar ao backend:
-- A política garante que um usuário só pode visualizar (SELECT)
-- as evidências de deploy que pertencem ao seu próprio Workspace.
CREATE POLICY "Isolamento de Tenant" ON gmud_evidences
FOR SELECT USING (
workspace_id = (select auth.jwt()->>'workspace_id')::uuid
);