Qu'est-ce qu'une architecture de base de données multi-tenant ?

Mis à jour : septembre 2026

L’architecture de base de données multi-tenant est un modèle qui stocke de nombreux clients dans une couche de données, isolés par ligne, schéma ou base dédiée. Ces trois niveaux d’isolation constituent tout l’espace de décision — le reste du sujet n’en est que la conséquence : comment s’exécutent les migrations, ce que coûte une restauration, où vit le noisy neighbor (voisin bruyant) et jusqu’où chaque modèle passe à l’échelle.

Points clés

QuestionRéponse
Les trois modèlesSchema partagé (tenant ID par ligne) · schema par tenant · base par tenant
Le vocabulaire cloudLes trois mêmes : pool · bridge · silo
Le choix par défautSchema partagé, sauf si la conformité ou l’échelle imposent l’isolation
Les plafonds pratiquesSilo : ~quelques centaines de tenants · bridge : ~1 000 · pool : des millions (avec sharding : illimité)
La règle absolueAppliquer l’isolation dans la base de données, pas dans chaque requête

Les trois modèles, en SQL

-- Modèle 1 · Schema partagé ("pool") : un seul jeu de tables, le tenant sur chaque ligne
CREATE TABLE invoices (
  tenant_id uuid   NOT NULL,
  id        bigint GENERATED ALWAYS AS IDENTITY,
  total     numeric(10,2),
  PRIMARY KEY (tenant_id, id)      -- le tenant en tête : prêt pour l'index et le sharding
);
ALTER TABLE invoices ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_rows ON invoices
  USING (tenant_id = current_setting('app.tenant')::uuid);

-- Modèle 2 · Schema par tenant ("bridge") : une seule base, un namespace chacun
CREATE SCHEMA tenant_acme;          -- mêmes tables, répétées pour chaque tenant

-- Modèle 3 · Base par tenant ("silo") : séparation physique complète
CREATE DATABASE tenant_acme;        -- isolation la plus forte ; N exemplaires de tout

Sur un backend géré, la même garantie s’exprime sans SQL : le contrôle d’accès vit sur les données elles-mêmes, donc l’isolation tient sur chaque chemin — API, dashboard ou SDK :

// JavaScript / Node.js — Back4app JS SDK
// The same query for every tenant — ACLs scope results server-side
const query = new Parse.Query('Invoice');
const invoices = await query.find({ sessionToken: user.getSessionToken() });
// Only rows this tenant's role can read come back. No WHERE clause to forget.

Schema partagé vs. schema par tenant vs. base par tenant

Les trois modèles de base de données multi-tenantLe schema partagé garde tous les tenants dans un seul jeu de tables, séparés par un tenant ID ; le schema par tenant donne à chaque tenant son propre namespace au sein d'une base ; la base par tenant donne à chaque tenant une base de données entièrement séparée.

Base par tenant · silo

Une base par tenant
séparation complète

Schema par tenant · bridge

Une seule base
un namespace par tenant

Schema partagé · pool

Un seul jeu de tables
tenant_id sur chaque ligne

Le schema partagé garde tous les tenants dans un seul jeu de tables, séparés par un tenant ID ; le schema par tenant donne à chaque tenant son propre namespace au sein d'une base ; la base par tenant donne à chaque tenant une base de données entièrement séparée.
DimensionSchema partagéSchema par tenantBase par tenant
IsolationLogique, par ligneNamespacePhysique
Plafond de tenantsDes millions~Centaines–1 000Dizaines–quelques centaines
Coût par tenantLe plus basIntermédiaireLe plus élevé
MigrationsExécutées une fois, touchent tout le mondeExécutées × N, orchestréesExécutées × N, orchestrées
Restauration par tenantDifficile (copie sélective)ModéréeTriviale (restaurer une base)
Noisy neighborLe plus exposéPartiellement contenuÉliminé
Personnalisation par tenantLa plus difficilePossible par schémaLa plus facile
Onboarding d’un tenantInsérer une ligneCréer un schémaProvisionner une base

Les pièges

  • L’indexation se fait « tenant d’abord ». tenant_id figure dans chaque table — même là où les jointures le font paraître redondant — et ouvre chaque index composite : (tenant_id, created_at), pas l’inverse. Chaque requête réelle est restreinte à un tenant ; les index doivent l’être aussi.
  • Les migrations se multiplient avec l’isolation. La flexibilité du silo se paie d’une couche d’orchestration : suivi des versions par tenant, logique de nouvelle tentative, détection de dérive. Les équipes sous-estiment cette ligne plus que n’importe quelle autre du tableau.
  • La sécurité au niveau des lignes a ses petites lignes opérationnelles. Les politiques s’appuient sur des paramètres par connexion, qui interagissent avec les modes de pooling de connexions — définissez le tenant par transaction, et testez le pooler. Auditez aussi quels rôles contournent RLS ; les chemins superutilisateur sont la faille classique.
  • L’arithmétique des connexions. Un pool par base de tenant épuise vite les connexions ; les conceptions à schema partagé partagent un seul pool — un autre avantage discret du modèle pool, qui n’apparaît qu’à grande échelle.
  • L’asymétrie de restauration pousse à la répartition par niveaux. “Pouvez-vous restaurer uniquement nos données à hier ?” est une question de contrat grand compte ; si la réponse doit être oui, ce tenant a sa place dans un silo — ce qui mène directement à l’hybride.

Passage à l’échelle et état final hybride

La voie de croissance du modèle pool est le sharding par tenant : plusieurs bases à schema partagé, chacune contenant une partie des tenants, avec un catalogue qui associe tenant → shard (le projet open-source Citus a intégré cela dans PostgreSQL, y compris le déplacement d’un tenant très actif vers son propre nœud). Combiné à une répartition en tiers, cela donne l’architecture vers laquelle convergent la plupart des SaaS matures : le tier gratuit mutualisé, les tenants de taille moyenne mutualisés sur plusieurs shards, et les quelques tenants réglementés ou énormes en silo — avec tenant_id conservé dans chaque schéma, partout, pour que n’importe quel tenant puisse changer de tier sans refonte. La mobilité des tenants est la propriété à concevoir dès le premier jour ; il est presque impossible de l’ajouter après coup.

Cas d’usage courants

  • SaaS B2B. Le cas fondateur : chaque workspace, organisation ou équipe de votre produit est un tenant dans l’un de ces modèles.
  • Produits freemium à grande échelle. Des milliers de petits tenants gratuits mutualisés à un coût marginal proche de zéro — l’économie qui rend les offres gratuites possibles.
  • Secteurs réglementés. Des clients de la santé, de la finance et du juridique qui exigent contractuellement des silos — servis depuis la même base de code grâce à l’hybride.
  • Agences et plateformes. Une application qui sert de nombreuses organisations clientes, chacune avec sa propre frontière.
  • Plateformes internes multi-équipes. Les départements comme tenants sur des outils partagés — mêmes modèles, modèle de menace plus clément.

Quel modèle devriez-vous choisir ? Matrice de décision

Choisissez le schema partagé quand…Choisissez le schema par tenant quand…Choisissez la base par tenant quand…
Les tenants sont nombreux et petitsLes tenants se comptent en centainesLes tenants sont peu nombreux et grands
Le coût par tenant doit tendre vers zéroUne isolation modérée vaut un peu d’exploitationLa conformité exige une séparation physique
Une seule migration doit mettre tout le monde à jourDes ajustements de schéma par tenant sont nécessairesLa restauration par tenant est contractuelle
Inscription en self-service, onboarding instantanéLes tenants arrivent à un rythme humainChaque tenant justifie un provisionnement
Vous ferez du sharding en grandissantVous plafonnerez le nombre de tenantsVous automatiserez les migrations × N

Et la méta-réponse : choisissez par niveau, pas par entreprise — les conceptions hybrides placent chaque tenant dans le modèle le moins cher qui satisfait ses exigences, et le déplacent quand ces exigences changent.

Limites et trade-offs

  • Schema partagé : le besoin le plus fort d’une isolation appliquée par la base de données — un filtre oublié est une brèche, c’est pourquoi RLS ou les ACL de la couche de données sont non négociables, et non un durcissement optionnel.
  • Schema par tenant : l’entre-deux inconfortable — une orchestration des migrations comparable à celle du silo, une isolation plus faible que celle du silo, et des limites de métadonnées de la base qui arrivent étonnamment tôt.
  • Base par tenant : tout × N — migrations, sauvegardes, supervision, connexions, coût — et l’analytique entre tenants qui devient un projet de data engineering.
  • Les trois : le contexte de tenant envahit tout (requêtes, caches, jobs, logs), et passer d’un modèle à l’autre coûte cher sans discipline des identifiants dès le premier jour : identifiants globalement uniques et colonnes tenant_id partout, même dans les silos.

Les données multi-tenant sur Back4app

Back4app est une plateforme open-source de Backend as a Service (BaaS) qui combine une base de données gérée, des API REST et GraphQL générées automatiquement, l’authentification, le stockage de fichiers et des fonctions serverless avec Cloud Code. Sa réponse à la règle absolue de cet article — appliquer l’isolation dans la base de données — ce sont des ACL par objet, des rôles par tenant et des permissions au niveau de la classe, vérifiés par la plateforme à chaque requête et depuis chaque surface, comme le montrent les onglets de code ci-dessus. C’est le modèle à schema partagé, débarrassé du risque de la clause WHERE ; l’analyse d’ingénierie sur la sécurité au niveau des lignes détaille le modèle complet sur une base de données documentaire, et la vue côté hébergement du même sujet couvre le niveau d’infrastructure situé au-dessus.

Questions fréquentes

Quels sont les trois modèles de base de données multi-tenant ?

Le schema partagé — un seul jeu de tables, chaque ligne portant un identifiant de tenant ; le schema par tenant — une seule base, un namespace de tables distinct par client ; et la base par tenant — une séparation physique complète. Les guides d'architecture cloud nomment ces trois mêmes modèles pool, bridge et silo. Les systèmes réels les combinent de plus en plus, en répartissant les tenants entre les modèles selon leur taille et leurs besoins de conformité.

Base partagée ou base par tenant : laquelle choisir ?

Le choix par défaut qui fait consensus est le schema partagé, sauf si quelque chose impose l'isolation : exigences réglementaires, séparation contractuelle des données, forte personnalisation par tenant ou tenants assez gros pour nécessiter leurs propres ressources. Le schema partagé maximise la densité et minimise l'exploitation ; les bases par tenant maximisent l'isolation et multiplient tout le reste — migrations, sauvegardes, connexions, coût.

Combien de tenants chaque modèle peut-il gérer ?

Les plafonds pratiques tirés de l'expérience en production : la base par tenant tient confortablement jusqu'à quelques dizaines ou quelques centaines de tenants avant que l'exploitation ne domine ; le schema par tenant atteint les centaines, jusqu'à environ un millier, avant que les métadonnées et l'orchestration des migrations ne saturent ; le schema partagé passe à des milliers, voire des millions de tenants, et le sharding du schema partagé par tenant l'étend pratiquement sans limite.

Comment empêcher un tenant de voir les données d'un autre tenant ?

Par la défense en profondeur, jamais par une clause WHERE seule. La restriction au tenant côté application (middleware ou filtres d'ORM) est la première couche ; la sécurité au niveau des lignes appliquée par la base de données est la seconde — des politiques qui filtrent chaque requête selon le tenant courant, quoi que l'application ait oublié. Dans les conceptions à schema partagé, un seul filtre oublié est une fuite de données entre tenants, c'est pourquoi la base de données elle-même doit appliquer la frontière.

Comment fonctionnent les migrations de schéma selon les modèles ?

Avec un schema partagé, une migration met à jour tous les tenants d'un coup — simple, avec un rayon d'impact à la hauteur. Avec un schema ou une base par tenant, la même migration doit s'exécuter une fois par tenant : des centaines d'exécutions qui demandent orchestration, suivi des versions et détection de dérive, puisqu'une exécution ratée laisse un tenant sur un schéma plus ancien. L'outillage de migration est la taxe cachée de l'isolation.

Peut-on restaurer les données d'un seul tenant ?

Avec une base par tenant, trivialement — restaurez cette base à n'importe quel instant, sans toucher personne d'autre. Avec un schema partagé, c'est vraiment difficile : la sauvegarde contient tout le monde, donc vous restaurez sur une instance annexe et recopiez sélectivement les lignes du tenant. La restauration par tenant est l'un des arguments pratiques les plus forts que les grandes entreprises avancent en faveur de niveaux d'isolation.

Comment indexer une base de données multi-tenant à schema partagé ?

Placez l'identifiant de tenant dans chaque table — même là où il semble redondant — et mettez-le en tête de vos index composites, pour que chaque type de requête devienne « tenant d'abord ». Faire de la colonne de tenant la première partie de la clé primaire prépare aussi les données au sharding par tenant, qui est la voie de croissance standard.

Qu'est-ce que le sharding par tenant ?

Répartir une conception à schema partagé sur plusieurs bases de données, toutes les lignes d'un même tenant résidant sur exactement un shard, avec un catalogue qui associe les tenants aux shards. On préserve ainsi la densité du schema partagé tout en plafonnant la taille de chaque base, et on peut déplacer les tenants très actifs vers des shards plus calmes. Le prix : le catalogue, l'outillage de rééquilibrage et la perte des requêtes triviales entre tenants.

Termes associés

À comparer avec

Lectures recommandées

Prêt à construire votre backend ?

Lancez votre projet sur Back4app en quelques minutes — base de données, authentification, API et Cloud Code inclus. Sans carte bancaire.

Écrit et révisé par Back4app Engineering, Back4app Engineering · Publié le 2026-09-15