Sécurité RLS
Comment les mécanismes RLS fonctionnent et pourquoi ils sont indispensables dans la cybersécurité aujourd’hui ?

Notions théoriques
Qu’est-ce que RLS ?
Row-Level Security (RLS) est un mécanisme de sécurité (de certaines bases de données relationnelles) qui permet de contrôler l'accès aux lignes d'une table en fonction de l’utilisateur connecté.
Cela permet de dire par exemple :
"Un joueur connecté peut voir ses scores, mais pas ceux des autres."
Ou encore :
"Un utilisateur non connecté peut voir les questions, mais ne peut pas les modifier."
Pourquoi utiliser RLS ?
Pourquoi les RLS de PostgreSQL/Supabase sont essentielles pour la cybersécurité ?
1. Garantir que chacun n’accède qu’aux données qui le concernent. Avec les RLS, la base de données contrôle elle-même quelles lignes un utilisateur peut consulter ou modifier. Cela évite qu’un utilisateur, même légitime, voie des informations qui ne lui sont pas destinées.
2. Assurer une protection fiable, même en cas d’erreur applicative. La sécurité n’est pas seulement gérée dans le code : elle est intégrée au cœur de la base. Ainsi, même si l’application comporte un bug ou une faille, les données restent protégées par des règles robustes.
3. Se préparer aux bonnes pratiques du monde professionnel. Les RLS sont utilisées dans de nombreux environnements pour prévenir les fuites de données et respecter les exigences de sécurité. Les comprendre et savoir les mettre en place, c’est déjà adopter une posture professionnelle en cybersécurité.
Ne pas utiliser les RLS, c’est prendre le risque que des utilisateurs malveillants ou même accidentels accèdent à des données sensibles ou modifient des informations critiques.
Par défaut, dans PostgreSQL/Supabase :
- Sans RLS, toutes les données sont accessibles (lecture, écriture, suppression)
- Même un utilisateur non connecté peut modifier les données (dangereux !)
Il est donc essentiel de mettre en place des règles de sécurité avec les RLS.
Comment fonctionne RLS ?
- Vous activez RLS sur une table
- Vous écrivez des règles (policies) pour définir :
- Qui peut lire
- Qui peut écrire
- Qui peut modifier
- Qui peut supprimer
Ces règles sont écrites en SQL, mais Supabase vous propose une interface graphique simple pour les créer.
Exemple de règle RLS
Autoriser à lire toutes les questions, même sans être connecté :
CREATE POLICY "Lecture publique"
ON question
FOR SELECT
USING (true);
Empêcher toute modification :
CREATE POLICY "Pas d'écriture publique"
ON question
FOR INSERT, UPDATE, DELETE
USING (false);
Tables concernées dans notre projet
Nous allons appliquer les RLS sur les tables suivantes :
| Table | Rôle des RLS |
|---|---|
question | Lecture autorisée à tous, écriture interdite |
reponse | Lecture autorisée à tous, écriture interdite |
D’autres tables comme
joueurouscoreauront des règles différentes (nous verrons ça plus tard).
Exemple pratique
Imaginons que vous avez une table question avec les colonnes suivantes :
idtexteimage_urlexplication
Sans RLS, n’importe qui peut :
- Lire les questions
- Modifier ou supprimer les questions
- Ajouter de nouvelles questions
Avec RLS activé et bien configuré, vous pouvez :
- Autoriser tout le monde à lire les questions
- Interdire tout le monde à modifier les questions