Row Level Security (RLS)
PostgreSQL 🔴 SeniorDéfinition
Mécanisme qui restreint, ligne par ligne, les données visibles ou modifiables selon le role connecte, en complément des privilèges SQL classiques. Une fois ENABLE ROW LEVEL SECURITY active sur une table, aucune ligne n'est accessible tant qu'aucune CREATE POLICY explicite n'existe.
Analogie
Comme donner a chaque locataire d'un immeuble une clé qui n'ouvre que sa propre porte, même s'ils partagent le même bâtiment (la même table).
Exemple de code
ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;
CREATE POLICY tenant_isolation ON accounts
USING (
tenant_id = current_setting('app.current_tenant_id')::int
)
WITH CHECK (
tenant_id = current_setting('app.current_tenant_id')::int
);
Cas d'usage
Isoler les données de plusieurs clients (multi-tenant) dans une seule table partagée sans dupliquer la base.
Anti-pattern
Oublier que le propriétaire de la table et les superutilisateurs contournent RLS par défaut, sauf FORCE ROW LEVEL SECURITY.
Termes liés
Fiche mise à jour le 2026-09-27