SaaS multi-tenant: segregare i dati in modo corretto
Cosa significa multi-tenant e come si sceglie l'isolamento dei dati in un SaaS: database dedicato, schema separato o riga condivisa, e cosa cambia con l'AI.
Il "Data Leakage" tra clienti SaaS è ormai all'ordine del giorno
Integrare l'intelligenza artificiale o nuove funzionalità in una piattaforma SaaS non è solo una sfida di implementazione. Senza una strategia di segregazione dei dati rigorosa e una Privacy & Security by Design reale, il rischio di un "context leak" (ovvero la fuga di informazioni tra un tenant e l'altro) diventa una certezza statistica, dipende solo se tocca a te ora o dopo. Se la struttura di base è debole, magari un multi-tenant implementato solo "sulla carta" dove la sicurezza è delegata a semplici filtri software, il disastro è solo questione di tempo.
In questo articolo analizziamo concettualmente come costruire un'architettura SaaS AI multi-tenant sicura, proteggendo la privacy senza sacrificare le performance, partendo dalle fondamenta del database fino agli Agenti AI.
Filtrare per tenant_id è un rischio
Molte aziende approcciano il multi-tenancy in modo superficiale: usano un unico database relazionale e aggiungono una colonna tenant_id a tutte le tabelle: dai dati anagrafici alle preferenze, fino ai dati PII (Personally Identifiable Information).
Diciamolo: questo non è vero multi-tenancy
È un database condiviso protetto da un filtro applicativo. Se il tuo codice ha una falla, se una query viene scritta male o se un attacco di SQL injection va a segno, i dati di tutti i tuoi clienti sono esposti. La sicurezza è delegata alla perfezione del codice, che sappiamo non esistere.
Il vero multi-tenancy richiede un isolamento a livello di database applicativo. Questo significa dividere i dati in istanze di database separate o database distinti. Certo, complica la gestione iniziale e la manutenzione, ma offre un livello di sicurezza inarrivabile con altri metodi.
I vantaggi del "Database-per-Tenant"
Oltre alla sicurezza granitica, questo approccio offre vantaggi operativi enormi:
-
Portabilità e Manutenzione: Spostare un singolo Partner da un'architettura hardware a un'altra, o da un server a un altro per bilanciare il carico, diventa un'operazione banale e sicura.
-
ROI e Costi Futuri: È un costo più alto inizialmente? Sì. Ma è un vantaggio competitivo enorme che abbassa drasticamente i costi futuri di gestione, migrazione e, soprattutto, i costi di un possibile data breach.
Questo problema si amplifica esponenzialmente quando si introduce il RAG (Retrieval-Augmented Generation). Se il tuo modello "vede" o indicizza i dati di tutti i clienti nello stesso spazio vettoriale prima di applicare un filtro logico, hai già perso. La sicurezza deve essere strutturale, non opzionale.
Tre livelli di isolamento
Quando si progettano architetture multi-tenant moderne, si applicano principi di privacy e security by design che vanno oltre il semplice codice applicativo. L'obiettivo è creare una "federazione" di dati dove ogni cliente è isolato su tre livelli:
-
Isolamento fisico dello Storage: Non ci limitiamo a filtrare le righe. Si utilizzano namespaces separati, schemi di database distinti o, nei casi più critici, istanze di database (relazionali e vettoriali) fisicamente separate. Se i dati non "vivono" nello stesso spazio logico, non possono mescolarsi per errore.
-
Orchestrazione Federata: L'applicazione (o l'Agente AI) non deve mai avere accesso diretto all'intero patrimonio informativo. Si utilizza un layer di orchestrazione che inietta il contesto specifico e le credenziali di accesso solo dopo una validazione rigorosa dell'identità del tenant.
-
Monitoraggio in tempo reale: È fondamentale monitorare non solo gli errori di sistema, ma le "anomalie di perimetro". Se una richiesta tenta di accedere a risorse (file, righe, vettori) fuori dal confine del tenant corrente, il sistema deve bloccare l'azione e generare un alert istantaneo.
Come isolare il contesto
Ecco un esempio concettuale di come implementare un wrapper sicuro che garantisca l'isolamento tra i tenant:
// Secure Multi-tenant Context Wrapperasync function executeAgentTask(tenantId: string, userPrompt: string) {// 1. Strict validation of Tenant perimeterconst tenantContext = await securityService.getValidatedContext(tenantId);// 2. Injection of client-specific Guardrails and Storageconst safeAgent = new AgentOrchestrator({// Physical or logical isolation at the storage layerstorage: new TenantIsolatedStorage(tenantId),systemPrompt: `You are an assistant for ${tenantContext.name}. Stay strictly within this context...`, });// 3. Execution with active auditing and monitoringreturn await safeAgent.run(userPrompt);}Perché il multi-tenancy robusto è un vantaggio competitivo
Creare un'architettura SaaS realmente sicura (che includa database relazionali, sistemi legacy e AI) richiede un investimento maggiore in fase di design. Ma nel mercato attuale, la sicurezza è il miglior asset commerciale.
Un SaaS che garantisce l'isolamento dei dati "by design" può attrarre i grandi player Enterprise che oggi guardano al cloud e all'AI con diffidenza. Come abbiamo visto nell'evoluzione degli Agenti AI nel SDLC, il futuro appartiene a chi sa gestire la complessità senza sacrificare l'integrità.
In Volcanic Minds non ci limitiamo a "montare" moduli AI o a delegare lo sviluppo tramite vibe coding. Valutiamo ogni scelta architettonica e usiamo l'innovazione a vantaggio dei nostri Partner. Progettiamo architetture Cloud Native agnostiche dove la segregazione dei dati è un requisito non superfluo, così come lo è la scalabilità. Se stai progettando un prodotto in abbonamento, qui trovi come sviluppiamo piattaforme SaaS multi-tenant.
Database dedicato, schema separato o riga condivisa: come si sceglie?
Si sceglie in base a chi sono i clienti, alla compliance interna ed esterna, non alle preferenze tecniche che si conoscono o che sono comode realizzare. Database dedicato quando un cliente può chiedere per contratto che i suoi dati stiano separati, o quando serve poterlo ripristinare da solo, garantirne l'isolamento e la federazione.
Schema separato come compromesso frequente. Riga condivisa quando i tenant sono molti e piccoli e il costo per tenant deve restare basso (e in base ai dati). La scelta pesa soprattutto sui costi operativi, sulla manutenzione e sui backup.
Come si garantisce che un tenant non veda i dati di un altro?
Non affidandosi alla disciplina di chi scrive le query.
L'isolamento va imposto in un punto solo e sotto il codice applicativo, non bypassabile, con il filtro sul tenant applicato a livello di accesso ai dati e non ripetuto a mano in ogni funzione.
La regola pratica: se una query scritta male può restituire i dati di un altro cliente, l'architettura è già sbagliata, indipendentemente da quanto è bravo il team.
Cosa cambia quando si aggiunge l'AI a un SaaS multi-tenant?
Cambia che l'isolamento deve valere anche per il recupero dei dati.
Un indice vettoriale costruito senza separazione fra tenant è un modo silenzioso di far uscire i dati di un cliente nella risposta data a un altro, e non lascia traccia in nessun log applicativo. Il filtro per tenant va applicato al recupero, prima che il contesto arrivi al modello.
Hai ancora dubbi?
Prenota un approfondimento sul multi tenant per dormire sonni tranquilli. Ne parliamo davanti a un caffè virtuale o meno.
Altri articoli sullo stesso tema.

Web Bot Auth: visitatori senza occhi
Gli agenti AI leggono il tuo sito e convertono meglio dell'organico, ma non compaiono negli analytics. Come misurarli e verificarli con Web Bot Auth.
Leggi
Generative UI: per umani e macchine
Il tuo gestionale serve persone e agenti AI. Con la Generative UI l'interfaccia si compone sul contesto, con un accesso per gli agenti e un fallback manuale.
Leggi
Agenti compositi: governance e affidabilità
Con Mastra e TypeScript l'AI valuta, il codice decide: sotto 80 punti la pratica si ferma. Agenti compositi con logica deterministica e governance verificabile.
Leggi