ONDEV Logo

Expert en acquisition client digitale. Création de sites web et applications sur-mesure qui convertissent.

Services
  • Création de Sites Web
  • Applications Sur-Mesure
  • Publicité Digitale
  • Référencement SEO
  • Développeur Web Marseille
  • Création de Logo
  • Design UX/UI
  • Refonte d'Application
  • Maintenance Applicative
  • Audit de Code
  • Agence Vibe Coding
  • Logiciel Métier Sur-Mesure
  • Agence No Code
  • Portail Client & Extranet
  • Intranet Sur-Mesure
  • Refonte Site WordPress
  • Migration Angular vers React
Navigation
  • Accueil
  • Réalisations
  • Expertise
  • Qui sommes-nous
  • Blog
  • Contact
Guides
  • Nos guides
  • Comment créer un site internet
  • Pourquoi créer un site internet
  • Coût d'un site internet
  • Choisir son prestataire web
Contact

Mathieu Rabissoni

06 01 37 20 21WhatsAppmathieu@ondev.fr

Marseille, France

Suivez-nous

LinkedInInstagramFacebook
Zones d'intervention
Marseille|Aix-en-Provence|Aubagne|La Ciotat|Cassis|Allauch|Gardanne|Marignane|Vitrolles|Toutes nos zones

© 2026 ONDEV. Tous droits réservés.

Mentions légalesPolitique de confidentialitéPlan du site
ONDEV Logo
Réalisations
Contact
On en discute

Expertise

Création de Sites WebSite Vitrine MarseilleSite E-Commerce MarseilleRéférencement SEOOptimisation GEOApplications Web & MobileAgence CommunicationPublicité en LigneDéveloppeur Web Marseille
Réalisations

Ressources

Qui sommes-nous ?BlogGuides
Contact
AppelerWhatsApp
On en discute
  1. Accueil
  2. Blog
  3. Supabase RLS : sécuriser vos données
Développement
24 juillet 202611 mn

Supabase RLS : sécuriser vos données

La Row Level Security de Postgres est le piège numéro 1 des apps Supabase générées par IA. Voici comment écrire des policies sûres et auditer votre base.

Mathieu Rabissoni

Mathieu Rabissoni

Expert Acquisition Client Digitale

Sommaire

01.Une seule table sans RLS, et toute votre base devient publique02.La Row Level Security, c'est quoi exactement ?03.Pourquoi c'est central sur Supabase04.Pourquoi la RLS est le piège numéro 1 des apps générées par IA05.1. La RLS n'est jamais activée06.2. Une policy trop permissive07.3. La clé service_role exposée08.Comment écrire une policy RLS : le B.A.-BA09.Exemples de policies concrètes10.Table profils : chacun gère la sienne11.Table articles : lecture publique, écriture par le propriétaire12.Multi-tenant : isolation par organisation13.Checklist de sécurisation RLS14.L'audit RLS ONDEV : ce qu'on vérifie sur chaque projet15.FAQ : Row Level Security sur Supabase16.Conclusion : la RLS n'est pas une option

Une seule table sans RLS, et toute votre base devient publique

Sur Supabase, chaque table exposée via l'API est lisible par n'importe qui tant que la Row Level Security n'est pas activée. Résultat concret : des applications lancées en quelques heures avec l'IA ont laissé fuiter emails, messages privés et données de paiement de tous leurs utilisateurs. Le coupable est presque toujours le même : une RLS mal comprise, ou tout simplement oubliée.

Dans cet article, vous allez découvrir :

  • •Ce qu'est vraiment la Row Level Security de Postgres (et pourquoi ce n'est pas celle de Power BI)
  • •Pourquoi la RLS est le piège numéro 1 des applications générées par IA
  • •Comment écrire des policies solides, avec des exemples SQL prêts à copier
  • •La checklist de sécurisation que nous appliquons sur chaque projet Supabase
Sur Supabase, une table sans policy n'est pas "un peu" exposée : elle est entièrement lisible par le public.

La Row Level Security, c'est quoi exactement ?

Attention à un piège dès le départ : si vous cherchez « row level security » sur Google, la moitié des résultats parlent de Power BI. Oubliez-les. Ici, on parle de la RLS de PostgreSQL, le moteur de base de données qui alimente Supabase. Cela n'a strictement rien à voir avec le filtrage de rapports Power BI.

La Row Level Security est une fonctionnalité native de Postgres depuis la version 9.5. Le principe : au lieu de contrôler l'accès table par table, vous contrôlez l'accès ligne par ligne, en fonction de l'utilisateur qui exécute la requête.

Concrètement, une policy RLS répond à une question simple pour chaque ligne : « Est-ce que cet utilisateur a le droit de voir (ou de modifier) cette ligne précise ? »

Pourquoi c'est central sur Supabase

Supabase expose automatiquement votre base Postgres via une API REST (PostgREST) et une API temps réel. Votre front-end appelle cette API avec une clé publique (la fameuse anon key), présente en clair dans le bundle JavaScript envoyé au navigateur.

Autrement dit : votre base de données est directement accessible depuis le navigateur de vos visiteurs. La seule barrière entre un attaquant et vos données, c'est la RLS. Pas votre code React, pas vos vérifications côté client : la RLS, au niveau de la base.

Pour comprendre où la RLS s'insère dans l'architecture globale (auth, API, temps réel, storage), consultez notre guide complet sur Supabase qui détaille chaque brique de la plateforme.


Pourquoi la RLS est le piège numéro 1 des apps générées par IA

Le « vibe coding » a démocratisé la création d'applications : on décrit une idée, l'IA génère le schéma de base, le front et les appels API. En quelques minutes, une app fonctionne. Le problème : l'IA génère rarement une RLS correcte.

Voici les trois scénarios que nous voyons le plus souvent en audit :

1. La RLS n'est jamais activée

L'IA crée les tables, branche le front sur Supabase, et tout marche. Sauf que sans ENABLE ROW LEVEL SECURITY, la table est ouverte à la lecture (et parfois à l'écriture) pour n'importe qui possédant la clé anon. Comme cette clé est dans le code du navigateur, n'importe quel visiteur peut lire toute la table depuis la console.

2. Une policy trop permissive

Deuxième cas classique : l'IA active bien la RLS, mais crée une policy USING (true) pour « que ça marche ». Cette condition est toujours vraie, donc elle autorise l'accès à toutes les lignes. C'est exactement comme ne pas avoir de RLS du tout, avec l'illusion d'être protégé.

3. La clé service_role exposée

La service_role bypasse totalement la RLS (c'est son rôle : les tâches serveur de confiance). Certaines apps générées la placent dans le front-end « parce que ça débloque tout ». C'est une catastrophe : n'importe qui peut alors tout lire, tout modifier, tout supprimer.

La RLS ne dispense pas de réfléchir à la sécurité. Elle vous oblige à la penser au bon endroit : dans la base, pas dans le navigateur.

Si vous fiabilisez une application créée avec l'IA, notre guide sur le vibe coding explique comment transformer un prototype généré en produit réellement sécurisé et maintenable.


Comment écrire une policy RLS : le B.A.-BA

Sécuriser une table se fait en deux temps.

Étape 1 : activer la RLS. Tant qu'elle n'est pas activée, aucune policy ne s'applique.

sql
alter table profiles enable row level security;

Une fois activée, le comportement par défaut est « tout refuser » : plus personne n'accède aux lignes tant que vous n'avez pas défini de policy. C'est le principe du « deny by default », la bonne base de départ.

Étape 2 : créer les policies. Une policy se compose de deux clauses selon l'opération :

  • •USING (...) : condition de visibilité (pour SELECT, UPDATE, DELETE). Elle filtre les lignes que l'utilisateur peut voir ou cibler.
  • •WITH CHECK (...) : condition de validité à l'écriture (pour INSERT, UPDATE). Elle vérifie que la nouvelle ligne respecte bien la règle.

La fonction magique de Supabase est auth.uid() : elle renvoie l'identifiant de l'utilisateur connecté (issu de son JWT). C'est le pivot de presque toutes vos policies.

sql
-- Chaque utilisateur lit uniquement son propre profil
create policy "read own profile"
on profiles for select
to authenticated
using ( auth.uid() = id );

Cette policy dit : un utilisateur authenticated ne peut lire une ligne de profiles que si l'id de la ligne correspond à son propre identifiant. Simple, mais c'est déjà toute la logique.

La RLS s'articule étroitement avec le système de connexion. Pour bien comprendre d'où vient auth.uid(), lisez notre article sur l'authentification Supabase, qui détaille les JWT, les rôles et la gestion des sessions.


Exemples de policies concrètes

Voici trois patterns que vous rencontrerez dans presque tous les projets.

Table profils : chacun gère la sienne

sql
alter table profiles enable row level security;

create policy "read own profile"
on profiles for select
to authenticated
using ( auth.uid() = id );

create policy "update own profile"
on profiles for update
to authenticated
using ( auth.uid() = id )
with check ( auth.uid() = id );

Table articles : lecture publique, écriture par le propriétaire

sql
alter table posts enable row level security;

-- Tout le monde peut lire les articles publiés
create policy "public read published"
on posts for select
to anon, authenticated
using ( status = 'published' );

-- Seul l'auteur peut créer un article à son nom
create policy "insert own posts"
on posts for insert
to authenticated
with check ( auth.uid() = author_id );

-- Seul l'auteur peut modifier ses articles
create policy "update own posts"
on posts for update
to authenticated
using ( auth.uid() = author_id )
with check ( auth.uid() = author_id );

Multi-tenant : isolation par organisation

Le cas le plus fréquent en SaaS : chaque utilisateur ne doit voir que les données de son organisation. On s'appuie sur une table de liaison plutôt que sur une simple colonne, pour éviter les fuites entre clients.

sql
alter table documents enable row level security;

create policy "read org documents"
on documents for select
to authenticated
using (
  organization_id in (
    select organization_id
    from memberships
    where user_id = auth.uid()
  )
);

Astuce performance : sur les grosses tables, encapsulez ce type de sous-requête dans une fonction security definer marquée stable, et indexez les colonnes utilisées dans les policies. La RLS mal indexée est une cause fréquente de lenteurs.


Checklist de sécurisation RLS

Avant de mettre une app Supabase en production, vérifiez chaque point de cette liste.

Point de contrôleCe qu'il faut vérifier
RLS activée partoutChaque table exposée à l'API a enable row level security
Aucune policy USING (true)Aucune règle n'autorise l'accès à toutes les lignes sans condition
service_role côté serveurLa clé service_role n'apparaît jamais dans le front-end
WITH CHECK sur les écrituresINSERT et UPDATE valident bien la propriété de la ligne
Rôles explicitesChaque policy précise to anon ou to authenticated
Vues et fonctionsLes vues n'exposent pas de données en contournant la RLS
StorageLes buckets Supabase Storage ont aussi leurs policies
Tests réelsVous avez tenté de lire les données d'un autre utilisateur, et échoué
Le test qui compte vraiment : connectez-vous avec le compte A, récupérez le token, et essayez de lire les données du compte B via l'API. Si ça échoue, votre RLS tient. Si ça passe, vous avez une faille. Ce test simple attrape la majorité des erreurs.

L'audit RLS ONDEV : ce qu'on vérifie sur chaque projet

Chez ONDEV, la RLS n'est pas une case à cocher en fin de projet : c'est une étape d'audit systématique, table par table, policy par policy.

Sur Wiloq, un SaaS de vestiaire numérique événementiel en production sur Next.js et Supabase (12+ fonctionnalités, 3 interfaces), chaque rôle (organisateur, staff, participant) dispose de policies distinctes. Un participant ne peut jamais lire les données d'un autre événement, même en manipulant l'API à la main.

Sur Swap&Share, plateforme d'échange de compétences bâtie sur React, Node et Stripe, l'isolation multi-tenant repose sur le même principe : une membership contrôle l'accès, pas une simple vérification front-end. Et sur l'application métier livrée à Dassault Aviation (90+ utilisateurs actifs), le cloisonnement des données par périmètre est audité de la même manière.

Notre méthode d'audit RLS suit trois passes :

  1. 1.Inventaire : lister chaque table exposée et son état RLS (activée ou non).
  2. 2.Analyse des policies : traquer les conditions permissives, les rôles manquants, les écritures non contrôlées.
  3. 3.Tests d'intrusion applicatifs : tenter concrètement d'accéder aux données d'un autre utilisateur via l'API.

Si vous confiez la mise en production à une agence Supabase qui maîtrise ces sujets, vous évitez la fuite de données qui ruine la confiance de vos utilisateurs le jour du lancement.


FAQ : Row Level Security sur Supabase

La RLS de Supabase est-elle la même que celle de Power BI ?
Non, aucun rapport. La RLS de Supabase est la Row Level Security native de PostgreSQL : elle filtre les lignes d'une table de base de données selon l'utilisateur connecté. Celle de Power BI concerne le filtrage de rapports décisionnels. Si vous travaillez avec Supabase, ne suivez que la documentation Postgres et Supabase.
Si j'active la RLS, est-ce que mon application va cesser de fonctionner ?
Oui, temporairement, et c'est normal. Une fois la RLS activée, toutes les lignes sont bloquées par défaut tant que vous n'avez pas créé de policies. C'est un signe que la sécurité fonctionne. Il faut ensuite écrire les policies pour rouvrir précisément les accès légitimes.
La clé anon exposée dans mon front-end, c'est un problème de sécurité ?
Non, la clé anon est faite pour être publique. Ce qui protège vos données, ce n'est pas le secret de cette clé, mais vos policies RLS. En revanche, la clé service_role ne doit jamais apparaître côté client : elle contourne toute la RLS.
Faut-il aussi vérifier les droits côté application ?
Les vérifications côté application améliorent l'expérience (masquer un bouton, par exemple), mais elles ne sécurisent rien : un utilisateur peut appeler l'API directement. La RLS au niveau de la base reste votre seule vraie ligne de défense, car elle s'applique quelle que soit la façon d'accéder aux données.
La RLS ralentit-elle les requêtes ?
Elle peut, si les policies contiennent des sous-requêtes non indexées sur de grosses tables. La solution : indexer les colonnes utilisées dans les policies et encapsuler la logique répétée dans des fonctions stable. Bien conçue, la RLS a un impact négligeable.

Conclusion : la RLS n'est pas une option

Sur Supabase, la Row Level Security n'est pas une fonctionnalité avancée réservée aux gros projets. C'est la barrière fondamentale entre vos données et le premier visiteur curieux. Une table sans policy correcte, et c'est toute votre base qui devient publique, y compris les apps générées à la va-vite avec l'IA.

La bonne nouvelle : quelques policies bien écrites, une checklist rigoureuse et un vrai test d'accès croisé suffisent à passer d'une base grande ouverte à une base réellement cloisonnée.

Vous lancez un projet Supabase ou vous avez un doute sur la sécurité d'une app existante ? Parlons de votre audit RLS : nous vérifions vos policies table par table avant que vos données ne se retrouvent exposées.

Auteur

Mathieu Rabissoni

Mathieu Rabissoni

Expert Web

Infos

24 juillet 2026
11 mn
Développement

Service lié

Création site internet

Site sur-mesure avec SEO intégré, livré en 30 jours.

Découvrir

Travailler avec ONDEV

On construit pour vous un site sur mesure, adapté à vos enjeux business.

  • Sans dépendance technique
  • Sans frais de maintenance inutiles
On en discute ?

Avec nous c'est simple, rien n'est compliqué !

Nos réalisations

Refonte & SEO - Amadeus Centre d’Affaires
Refonte & Stratégie SEO

Refonte & SEO - Amadeus Centre d’Affaires

Wiloq - Application SaaS Vestiaire Numérique
Application SaaS

Wiloq - Application SaaS Vestiaire Numérique

Voir toutes les réalisations

Une seule table sans RLS, et toute votre base devient publique

Sur Supabase, chaque table exposée via l'API est lisible par n'importe qui tant que la Row Level Security n'est pas activée. Résultat concret : des applications lancées en quelques heures avec l'IA ont laissé fuiter emails, messages privés et données de paiement de tous leurs utilisateurs. Le coupable est presque toujours le même : une RLS mal comprise, ou tout simplement oubliée.

Dans cet article, vous allez découvrir :

  • •Ce qu'est vraiment la Row Level Security de Postgres (et pourquoi ce n'est pas celle de Power BI)
  • •Pourquoi la RLS est le piège numéro 1 des applications générées par IA
  • •Comment écrire des policies solides, avec des exemples SQL prêts à copier
  • •La checklist de sécurisation que nous appliquons sur chaque projet Supabase
Sur Supabase, une table sans policy n'est pas "un peu" exposée : elle est entièrement lisible par le public.

La Row Level Security, c'est quoi exactement ?

Attention à un piège dès le départ : si vous cherchez « row level security » sur Google, la moitié des résultats parlent de Power BI. Oubliez-les. Ici, on parle de la RLS de PostgreSQL, le moteur de base de données qui alimente Supabase. Cela n'a strictement rien à voir avec le filtrage de rapports Power BI.

La Row Level Security est une fonctionnalité native de Postgres depuis la version 9.5. Le principe : au lieu de contrôler l'accès table par table, vous contrôlez l'accès ligne par ligne, en fonction de l'utilisateur qui exécute la requête.

Concrètement, une policy RLS répond à une question simple pour chaque ligne : « Est-ce que cet utilisateur a le droit de voir (ou de modifier) cette ligne précise ? »

Pourquoi c'est central sur Supabase

Supabase expose automatiquement votre base Postgres via une API REST (PostgREST) et une API temps réel. Votre front-end appelle cette API avec une clé publique (la fameuse anon key), présente en clair dans le bundle JavaScript envoyé au navigateur.

Autrement dit : votre base de données est directement accessible depuis le navigateur de vos visiteurs. La seule barrière entre un attaquant et vos données, c'est la RLS. Pas votre code React, pas vos vérifications côté client : la RLS, au niveau de la base.

Pour comprendre où la RLS s'insère dans l'architecture globale (auth, API, temps réel, storage), consultez notre guide complet sur Supabase qui détaille chaque brique de la plateforme.


Pourquoi la RLS est le piège numéro 1 des apps générées par IA

Le « vibe coding » a démocratisé la création d'applications : on décrit une idée, l'IA génère le schéma de base, le front et les appels API. En quelques minutes, une app fonctionne. Le problème : l'IA génère rarement une RLS correcte.

Voici les trois scénarios que nous voyons le plus souvent en audit :

1. La RLS n'est jamais activée

L'IA crée les tables, branche le front sur Supabase, et tout marche. Sauf que sans ENABLE ROW LEVEL SECURITY, la table est ouverte à la lecture (et parfois à l'écriture) pour n'importe qui possédant la clé anon. Comme cette clé est dans le code du navigateur, n'importe quel visiteur peut lire toute la table depuis la console.

2. Une policy trop permissive

Deuxième cas classique : l'IA active bien la RLS, mais crée une policy USING (true) pour « que ça marche ». Cette condition est toujours vraie, donc elle autorise l'accès à toutes les lignes. C'est exactement comme ne pas avoir de RLS du tout, avec l'illusion d'être protégé.

3. La clé service_role exposée

La service_role bypasse totalement la RLS (c'est son rôle : les tâches serveur de confiance). Certaines apps générées la placent dans le front-end « parce que ça débloque tout ». C'est une catastrophe : n'importe qui peut alors tout lire, tout modifier, tout supprimer.

La RLS ne dispense pas de réfléchir à la sécurité. Elle vous oblige à la penser au bon endroit : dans la base, pas dans le navigateur.

Si vous fiabilisez une application créée avec l'IA, notre guide sur le vibe coding explique comment transformer un prototype généré en produit réellement sécurisé et maintenable.


Comment écrire une policy RLS : le B.A.-BA

Sécuriser une table se fait en deux temps.

Étape 1 : activer la RLS. Tant qu'elle n'est pas activée, aucune policy ne s'applique.

sql
alter table profiles enable row level security;

Une fois activée, le comportement par défaut est « tout refuser » : plus personne n'accède aux lignes tant que vous n'avez pas défini de policy. C'est le principe du « deny by default », la bonne base de départ.

Étape 2 : créer les policies. Une policy se compose de deux clauses selon l'opération :

  • •USING (...) : condition de visibilité (pour SELECT, UPDATE, DELETE). Elle filtre les lignes que l'utilisateur peut voir ou cibler.
  • •WITH CHECK (...) : condition de validité à l'écriture (pour INSERT, UPDATE). Elle vérifie que la nouvelle ligne respecte bien la règle.

La fonction magique de Supabase est auth.uid() : elle renvoie l'identifiant de l'utilisateur connecté (issu de son JWT). C'est le pivot de presque toutes vos policies.

sql
-- Chaque utilisateur lit uniquement son propre profil
create policy "read own profile"
on profiles for select
to authenticated
using ( auth.uid() = id );

Cette policy dit : un utilisateur authenticated ne peut lire une ligne de profiles que si l'id de la ligne correspond à son propre identifiant. Simple, mais c'est déjà toute la logique.

La RLS s'articule étroitement avec le système de connexion. Pour bien comprendre d'où vient auth.uid(), lisez notre article sur l'authentification Supabase, qui détaille les JWT, les rôles et la gestion des sessions.


Exemples de policies concrètes

Voici trois patterns que vous rencontrerez dans presque tous les projets.

Table profils : chacun gère la sienne

sql
alter table profiles enable row level security;

create policy "read own profile"
on profiles for select
to authenticated
using ( auth.uid() = id );

create policy "update own profile"
on profiles for update
to authenticated
using ( auth.uid() = id )
with check ( auth.uid() = id );

Table articles : lecture publique, écriture par le propriétaire

sql
alter table posts enable row level security;

-- Tout le monde peut lire les articles publiés
create policy "public read published"
on posts for select
to anon, authenticated
using ( status = 'published' );

-- Seul l'auteur peut créer un article à son nom
create policy "insert own posts"
on posts for insert
to authenticated
with check ( auth.uid() = author_id );

-- Seul l'auteur peut modifier ses articles
create policy "update own posts"
on posts for update
to authenticated
using ( auth.uid() = author_id )
with check ( auth.uid() = author_id );

Multi-tenant : isolation par organisation

Le cas le plus fréquent en SaaS : chaque utilisateur ne doit voir que les données de son organisation. On s'appuie sur une table de liaison plutôt que sur une simple colonne, pour éviter les fuites entre clients.

sql
alter table documents enable row level security;

create policy "read org documents"
on documents for select
to authenticated
using (
  organization_id in (
    select organization_id
    from memberships
    where user_id = auth.uid()
  )
);

Astuce performance : sur les grosses tables, encapsulez ce type de sous-requête dans une fonction security definer marquée stable, et indexez les colonnes utilisées dans les policies. La RLS mal indexée est une cause fréquente de lenteurs.


Checklist de sécurisation RLS

Avant de mettre une app Supabase en production, vérifiez chaque point de cette liste.

Point de contrôleCe qu'il faut vérifier
RLS activée partoutChaque table exposée à l'API a enable row level security
Aucune policy USING (true)Aucune règle n'autorise l'accès à toutes les lignes sans condition
service_role côté serveurLa clé service_role n'apparaît jamais dans le front-end
WITH CHECK sur les écrituresINSERT et UPDATE valident bien la propriété de la ligne
Rôles explicitesChaque policy précise to anon ou to authenticated
Vues et fonctionsLes vues n'exposent pas de données en contournant la RLS
StorageLes buckets Supabase Storage ont aussi leurs policies
Tests réelsVous avez tenté de lire les données d'un autre utilisateur, et échoué
Le test qui compte vraiment : connectez-vous avec le compte A, récupérez le token, et essayez de lire les données du compte B via l'API. Si ça échoue, votre RLS tient. Si ça passe, vous avez une faille. Ce test simple attrape la majorité des erreurs.

L'audit RLS ONDEV : ce qu'on vérifie sur chaque projet

Chez ONDEV, la RLS n'est pas une case à cocher en fin de projet : c'est une étape d'audit systématique, table par table, policy par policy.

Sur Wiloq, un SaaS de vestiaire numérique événementiel en production sur Next.js et Supabase (12+ fonctionnalités, 3 interfaces), chaque rôle (organisateur, staff, participant) dispose de policies distinctes. Un participant ne peut jamais lire les données d'un autre événement, même en manipulant l'API à la main.

Sur Swap&Share, plateforme d'échange de compétences bâtie sur React, Node et Stripe, l'isolation multi-tenant repose sur le même principe : une membership contrôle l'accès, pas une simple vérification front-end. Et sur l'application métier livrée à Dassault Aviation (90+ utilisateurs actifs), le cloisonnement des données par périmètre est audité de la même manière.

Notre méthode d'audit RLS suit trois passes :

  1. 1.Inventaire : lister chaque table exposée et son état RLS (activée ou non).
  2. 2.Analyse des policies : traquer les conditions permissives, les rôles manquants, les écritures non contrôlées.
  3. 3.Tests d'intrusion applicatifs : tenter concrètement d'accéder aux données d'un autre utilisateur via l'API.

Si vous confiez la mise en production à une agence Supabase qui maîtrise ces sujets, vous évitez la fuite de données qui ruine la confiance de vos utilisateurs le jour du lancement.


FAQ : Row Level Security sur Supabase

La RLS de Supabase est-elle la même que celle de Power BI ?
Non, aucun rapport. La RLS de Supabase est la Row Level Security native de PostgreSQL : elle filtre les lignes d'une table de base de données selon l'utilisateur connecté. Celle de Power BI concerne le filtrage de rapports décisionnels. Si vous travaillez avec Supabase, ne suivez que la documentation Postgres et Supabase.
Si j'active la RLS, est-ce que mon application va cesser de fonctionner ?
Oui, temporairement, et c'est normal. Une fois la RLS activée, toutes les lignes sont bloquées par défaut tant que vous n'avez pas créé de policies. C'est un signe que la sécurité fonctionne. Il faut ensuite écrire les policies pour rouvrir précisément les accès légitimes.
La clé anon exposée dans mon front-end, c'est un problème de sécurité ?
Non, la clé anon est faite pour être publique. Ce qui protège vos données, ce n'est pas le secret de cette clé, mais vos policies RLS. En revanche, la clé service_role ne doit jamais apparaître côté client : elle contourne toute la RLS.
Faut-il aussi vérifier les droits côté application ?
Les vérifications côté application améliorent l'expérience (masquer un bouton, par exemple), mais elles ne sécurisent rien : un utilisateur peut appeler l'API directement. La RLS au niveau de la base reste votre seule vraie ligne de défense, car elle s'applique quelle que soit la façon d'accéder aux données.
La RLS ralentit-elle les requêtes ?
Elle peut, si les policies contiennent des sous-requêtes non indexées sur de grosses tables. La solution : indexer les colonnes utilisées dans les policies et encapsuler la logique répétée dans des fonctions stable. Bien conçue, la RLS a un impact négligeable.

Conclusion : la RLS n'est pas une option

Sur Supabase, la Row Level Security n'est pas une fonctionnalité avancée réservée aux gros projets. C'est la barrière fondamentale entre vos données et le premier visiteur curieux. Une table sans policy correcte, et c'est toute votre base qui devient publique, y compris les apps générées à la va-vite avec l'IA.

La bonne nouvelle : quelques policies bien écrites, une checklist rigoureuse et un vrai test d'accès croisé suffisent à passer d'une base grande ouverte à une base réellement cloisonnée.

Vous lancez un projet Supabase ou vous avez un doute sur la sécurité d'une app existante ? Parlons de votre audit RLS : nous vérifions vos policies table par table avant que vos données ne se retrouvent exposées.

Mathieu Rabissoni

Mathieu Rabissoni

Expert Web

24 juillet 2026
11 mn
Développement

Service lié

Création site internet

Site sur-mesure avec SEO intégré, livré en 30 jours.

Découvrir

Travailler avec ONDEV

On construit pour vous un site sur mesure, adapté à vos enjeux business.

On en discute ?
Mathieu Rabissoni

Mathieu Rabissoni

Expert Acquisition Client Digitale

Passionné par le web depuis toujours, j'aide les entreprises à acquérir des clients grâce au digital. Sites web, applications, SEO : je transforme vos idées en solutions performantes.

En savoir plus

Services ONDEV liés à cet article

Création site internet Marseille•Application web sur-mesure•Refonte de site internet•Expert Next.js Marseille•Agence web Marseille•Nos réalisations

Besoin d'aide pour votre projet ?

Discutons de vos objectifs et voyons comment je peux vous aider à les atteindre.

Prendre rendez-vousAppelerWhatsApp