Row Level Security (RLS)

PostgreSQL 🔴 Senior

Dé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.
#sgbd#interview#database#postgresql#security

Fiche mise à jour le 2026-09-27

← → au clavier pour passer d'une fiche à l'autre