Multi-tenance : un schéma, plusieurs clients
AvancéUne application SaaS doit isoler les données de chaque client (« locataire ») : trois grandes approches.
| Approche | Principe | Isolation | Coût d'exploitation |
|---|---|---|---|
Colonne tenant_id | Toutes les tables partagent un schéma ; chaque ligne porte son locataire | Logique (RLS conseillée) | Faible : une seule base à migrer |
| Schéma par locataire | Un schéma PostgreSQL par client | Forte | Moyen : N schémas à migrer (des milliers = pénible) |
| Base par locataire | Une base (ou instance) par client | Maximale | Élevé : pools, migrations, sauvegardes par client |
Colonne tenant_id, en pratique#
CREATE TABLE commandes (
tenant_id bigint NOT NULL,
id bigint GENERATED ALWAYS AS IDENTITY,
total numeric(12, 2) NOT NULL,
PRIMARY KEY (tenant_id, id)
);
CREATE INDEX ON commandes (tenant_id, cree_le DESC); -- tous les index commencent par tenant_id
- Mettre
tenant_iden tête de la clé et des index : les requêtes sont toujours filtrées par locataire. - Activer la RLS (voir le chapitre sécurité) : un oubli de
WHERE tenant_idne fuit pas de données. - Attention aux voisins bruyants : un gros client peut saturer la base ; prévoyez des quotas, ou déplacez-le vers sa propre base.
Astuce : commencez par
tenant_id+ RLS (le moins cher à exploiter). Réservez la base dédiée aux clients qui l'exigent contractuellement (conformité, isolation, gros volumes).