Aller au contenu principal

Gestion de BD Supabase

Comprendre les bases de données distantes et écrire des requêtes SQL simples

Notions théoriques

Qu’est-ce qu’une BD distante ?

Une base de données distante est une base hébergée sur un serveur accessible via Internet. Contrairement à une base locale (installée sur l’ordinateur personnel), elle peut être consultée par plusieurs utilisateurs à distance, à condition d’avoir les bons identifiants et droits d’accès.

info

Supabase utilise PostgreSQL comme moteur de base de données relationnelle, et expose automatiquement une API REST et GraphQL pour interagir avec la base.

Différences entre BD locale et distante

CaractéristiqueBase localeBase distante (Supabase)
LocalisationSur l’ordinateur de l’utilisateurServeur distant (cloud)
AccessibilitéUniquement en localAccessible depuis n’importe où
SécuritéFaible si non chiffréeAuthentification, RLS, SSL
SauvegardeManuelleAutomatisée dans Supabase
CollaborationDifficileFacile avec accès partagé

Requêtes SQL : les bases

Le langage SQL (Structured Query Language) est utilisé pour manipuler des bases de données relationnelles.

Voici quelques requêtes fondamentales :

  • CREATE TABLE : crée une nouvelle table
  • INSERT INTO : insère une ligne dans une table
  • SELECT : lit les données d’une table
  • UPDATE : modifie des données existantes
  • DELETE : supprime des lignes
  • WHERE : filtre les résultats d’une requête

Exemple de table simple

create table test_users (
id serial primary key,
name text
);
  • id est une clé primaire (unique) qui s’incrémente automatiquement.
  • name est une chaîne de caractères.

Insertion de données

insert into test_users (name) values ('Alice');
insert into test_users (name) values ('Bob');

Lecture des données

select * from test_users;

Requête conditionnelle

select * from test_users where name = 'Alice';

Risques liés aux requêtes SQL

Un des risques majeurs est l’injection SQL : un utilisateur malveillant injecte du code SQL dans un champ de formulaire pour détourner la base.

attention

Ne jamais insérer directement des données utilisateur dans une requête SQL sans les valider ou les échapper.

Bonnes pratiques à adopter

  • Valider les entrées utilisateur (longueur, type, contenu)
  • Utiliser des requêtes préparées dans les applications (paramètres sécurisés)
  • Limiter les permissions des utilisateurs sur les tables
  • Activer les Row Level Security (RLS) dans Supabase pour contrôler l’accès aux lignes

Exemple pratique

Faire ses premières requêtes SQL

Il est possible de créer une table de test dans Supabase, d’y insérer quelques données, puis de les interroger.

Étapes à suivre

  1. Se connecter à son projet Supabase
  2. Ouvrir le SQL Editor
  3. Créer une table appelée test_users avec deux colonnes :
    • id (auto-incrémenté, clé primaire)
    • name (texte)
  4. Insérer deux utilisateurs fictifs
  5. Lire les données avec une requête SELECT
  6. Filtrer les résultats avec un WHERE

Script SQL à exécuter dans Supabase

-- Création de la table
create table test_users (
id serial primary key,
name text
);

-- Insertion de données
insert into test_users (name) values ('Alice');
insert into test_users (name) values ('Bob');

-- Lecture complète
select * from test_users;

-- Filtrage
select * from test_users where name = 'Alice';
astuce

Il est possible d’exécuter toutes ces requêtes en une seule fois dans le SQL Editor de Supabase.

Résultat attendu

idname
1Alice
2Bob

Test de mémorisation/compréhension


Quel mot-clé SQL permet de lire des données dans une table ?


Quelle commande SQL permet d’insérer une nouvelle ligne ?


Quelle commande crée une table dans PostgreSQL ?


À quoi sert la clause WHERE ?


Que signifie 'serial' dans la définition d'une colonne ?


Quel est le risque si on insère directement une entrée utilisateur dans une requête SQL ?


Quelle est la différence entre une base locale et une base distante ?


Que signifie la clause 'primary key' ?


Quel outil de Supabase permet d’écrire du SQL ?


Pourquoi faut-il limiter les permissions sur une table ?



TP pour réfléchir et résoudre des problèmes

Objectif du TP

Ce TP vous permet de :

  • Créer une table simple dans Supabase,
  • Insérer des données dans cette table,
  • Interroger les données avec des requêtes SQL de base,
  • Comprendre la différence entre base locale et distante,
  • Appliquer des bonnes pratiques de sécurité.

Étape 1 — Créer une table test_users

  1. Connectez-vous à votre projet Supabase.
  2. Ouvrez le SQL Editor.
  3. Copiez-collez le code suivant pour créer une table test_users :
create table public.test_users (
id serial primary key,
name text
);
  1. Exécutez la requête.
Une solution

Étape 2 — Insérer des données

  1. Dans le SQL Editor, insérez deux utilisateurs fictifs :
insert into public.test_users (name) values ('Alice');
insert into public.test_users (name) values ('Bob');
  1. Exécutez les requêtes.
Une solution

Étape 3 — Lire les données avec SELECT

  1. Dans le SQL Editor, tapez la requête suivante :
select * from public.test_users;
  1. Exécutez la requête et observez le résultat.
Une solution

Étape 4 — Filtrer les résultats avec WHERE

  1. Dans le SQL Editor, tapez la requête suivante :
select * from public.test_users where name = 'Alice';
  1. Exécutez la requête.
Une solution

Étape 5 — Supprimer une ligne

  1. Supprimez la ligne correspondant à 'Bob' :
delete from public.test_users where name = 'Bob';
  1. Vérifiez que la ligne a bien été supprimée.
Une solution

Étape 6 — Modifier une ligne avec UPDATE

  1. Modifiez le nom Alice en Alice Dupont :
update public.test_users set name = 'Alice Dupont' where name = 'Alice';
  1. Vérifiez la mise à jour.
Une solution

Étape 7 — Supprimer la table (nettoyage)

  1. Supprimez la table pour repartir d’une base propre :
drop table public.test_users;
  1. Vérifiez qu’elle n’apparaît plus dans le Table Editor.
Une solution

Étape 8 — Comparaison BD locale/distante

  1. Réfléchissez aux avantages d’utiliser Supabase (base distante) plutôt qu’une base locale.
  2. Notez dans votre cahier ou fichier personnel trois avantages concrets.
Une solution

Étape 9 — Sécurité : Risques d'injection SQL

  1. Imaginez une application web qui exécute la requête suivante :
select * from users where username = '$input';
  1. Que se passe-t-il si l’utilisateur entre comme nom :
    x' OR '1'='1
Une solution

Étape 10 — Bonnes pratiques à retenir

  1. Listez au moins 3 bonnes pratiques pour sécuriser vos requêtes SQL dans Supabase ou ailleurs.
Une solution

Fin du TP

Vous avez :

  • Manipulé une table dans Supabase avec les commandes SQL de base,
  • Compris les différences entre base locale et distante,
  • Appliqué des bonnes pratiques de sécurité.

Vous êtes maintenant prêt pour la prochaine séance, où vous créerez la première vraie table du projet : profiles.