0Pricing
SQL Academy · Leçon

Rôles et privilèges

Accordez et révoquez des accès avec GRANT et REVOKE.

Rôles et privilèges est une leçon SQL Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage SQL Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours SQL Academy comprend 4 leçons au total.

Que sont les rôles et les privilèges ?

En SQL, les rôles sont des groupes nommés de privilèges qui peuvent être attribués à des utilisateurs. Les privilèges contrôlent les actions qu'un utilisateur ou un rôle est autorisé à effectuer sur des objets de base de données tels que les tables, les vues et les fonctions.

Plutôt que d'accorder des autorisations individuellement à chaque utilisateur, vous créez un rôle doté des privilèges requis, puis vous l'attribuez à de nombreux utilisateurs en une seule fois. Cela facilite considérablement la gestion du contrôle des accès à grande échelle.

Créer un rôle

Utilisez CREATE ROLE pour définir un nouveau rôle dans PostgreSQL. Un rôle peut représenter un seul utilisateur ou un groupe d'utilisateurs, selon sa configuration.

Les rôles sont créés sans aucun privilège par défaut : vous devez leur accorder explicitement l'accès aux objets.

CREATE ROLE readonly_user;
CREATE ROLE app_writer;
CREATE ROLE db_admin;

Accorder des privilèges sur une table

L'instruction GRANT donne à un rôle ou à un utilisateur l'autorisation d'effectuer des opérations précises sur un objet de base de données. Les privilèges courants au niveau des tables comprennent SELECT, INSERT, UPDATE et DELETE.

Vous pouvez accorder un seul privilège ou plusieurs à la fois en les séparant par des virgules.

-- Grant SELECT only (read-only role)
GRANT SELECT ON employees TO readonly_user;

-- Grant multiple privileges
GRANT SELECT, INSERT, UPDATE ON orders TO app_writer;

Accorder tous les privilèges

Si un rôle a besoin d'un accès complet à une table, vous pouvez utiliser GRANT ALL PRIVILEGES au lieu d'énumérer chaque autorisation individuellement. Cette instruction accorde tous les privilèges applicables sur l'objet spécifié.

Soyez prudent avec ALL PRIVILEGES : ne l'accordez qu'aux rôles qui ont réellement besoin d'un contrôle complet sur l'objet.

-- Grant full access to db_admin on a table
GRANT ALL PRIVILEGES ON employees TO db_admin;

-- Or the shorthand form
GRANT ALL ON orders TO db_admin;

Révoquer des privilèges

L'instruction REVOKE retire à un rôle ou à un utilisateur les privilèges qui lui avaient été accordés. C'est ainsi que vous renforcez le contrôle des accès lorsque les exigences changent ou qu'un rôle n'a plus besoin de certaines autorisations.

Après un REVOKE, le rôle concerné perd immédiatement le privilège spécifié sur l'objet nommé.

-- Remove UPDATE access from app_writer
REVOKE UPDATE ON orders FROM app_writer;

-- Remove all privileges from a role
REVOKE ALL PRIVILEGES ON employees FROM readonly_user;

Attribuer un rôle à un utilisateur

Dans PostgreSQL, les utilisateurs sont également des rôles : un rôle doté de l'attribut LOGIN peut se connecter à la base de données. Vous attribuez un rôle de groupe à un rôle de connexion à l'aide de GRANT role TO user.

Une fois attribué, l'utilisateur hérite de tous les privilèges associés à ce rôle, ce qui simplifie la gestion des autorisations pour de nombreux utilisateurs à la fois.

-- Create a login user
CREATE ROLE alice WITH LOGIN PASSWORD 'secret123';

-- Assign the readonly role to alice
GRANT readonly_user TO alice;

-- Alice can now SELECT on tables granted to readonly_user

Révoquer un rôle pour un utilisateur

Pour supprimer l'attribution d'un rôle à un utilisateur, utilisez REVOKE role FROM user. Après cela, l'utilisateur n'hérite plus des privilèges associés à ce rôle.

C'est utile lorsqu'une personne salariée change de responsabilités ou quitte l'organisation : vous pouvez révoquer son rôle sans modifier les propres définitions de privilèges du rôle.

-- Remove the readonly role from alice
REVOKE readonly_user FROM alice;

-- Alice no longer has SELECT on tables via that role

Privilèges au niveau du schema

Avant qu'un rôle puisse accéder à un objet quelconque dans un schema, il lui faut le privilège USAGE sur ce schema. Sans celui-ci, même un rôle disposant de SELECT sur une table précise ne peut pas lire les données, car il ne peut pas déterminer le chemin d'accès au schema.

Accordez toujours USAGE sur le schema en plus des privilèges au niveau de l'objet.

-- Allow readonly_user to see inside the public schema
GRANT USAGE ON SCHEMA public TO readonly_user;

-- Then grant table-level privilege
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly_user;

Privilèges par défaut pour les futurs objets

Lorsque de nouvelles tables sont créées dans un schema, les rôles existants n'y obtiennent pas automatiquement accès. Utilisez ALTER DEFAULT PRIVILEGES pour que les futurs objets créés par un rôle donné soient automatiquement accessibles à un autre rôle.

Cela évite un problème courant : une table nouvellement créée reste inaccessible aux rôles d'application jusqu'à ce que quelqu'un pense à exécuter manuellement GRANT.

-- Future tables created by the current user will be SELECTable by readonly_user
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT ON TABLES TO readonly_user;

-- Future tables will allow INSERT/UPDATE/DELETE for app_writer
ALTER DEFAULT PRIVILEGES IN SCHEMA public
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO app_writer;

La clause WITH GRANT OPTION

Par défaut, un rôle qui reçoit un privilège ne peut pas le transmettre à d'autres rôles. L'ajout de WITH GRANT OPTION permet également au bénéficiaire d'accorder ce privilège à d'autres personnes.

Utilisez cette possibilité avec prudence : le rôle devient un point de délégation de confiance pour le contrôle des accès, ce qui peut compliquer l'audit si elle est utilisée à l'excès.

-- app_writer can now grant SELECT on orders to other roles
GRANT SELECT ON orders TO app_writer WITH GRANT OPTION;

-- app_writer can then do:
-- GRANT SELECT ON orders TO reporting_role;

Consulter les privilèges accordés

PostgreSQL stocke les informations de privilèges dans les vues des catalogues système. Vous pouvez interroger information_schema.role_table_grants pour voir quels rôles ont reçu quels privilèges sur quelles tables.

La commande avec une barre oblique inverse \dp tablename dans psql affiche également la liste des privilèges d'accès d'une table dans un format compact.

-- List all table-level grants in the current database
SELECT grantee, table_schema, table_name, privilege_type
FROM information_schema.role_table_grants
WHERE table_schema = 'public'
ORDER BY grantee, table_name;

Vérification rapide

Testez votre compréhension des rôles et des privilèges en SQL.

Récapitulatif : rôles et privilèges

Dans cette leçon, vous avez appris comment SQL gère le contrôle des accès grâce aux rôles et aux privilèges :

  • CREATE ROLE définit un nouveau rôle ou compte utilisateur
  • GRANT accorde des privilèges (SELECT, INSERT, UPDATE, DELETE, ALL) sur des objets à un rôle
  • REVOKE retire ces privilèges
  • GRANT rôle TO utilisateur attribue un rôle de groupe à un utilisateur de connexion, qui en hérite les privilèges
  • Les rôles ont besoin de USAGE sur le schema avant de pouvoir accéder aux objets qui s'y trouvent
  • ALTER DEFAULT PRIVILEGES garantit que les futurs objets sont automatiquement accessibles
  • WITH GRANT OPTION permet au bénéficiaire de déléguer davantage le privilège

Le maintien de privilèges minimaux et fondés sur les rôles est un principe central de la conception sécurisée des bases de données : n'accordez que le nécessaire et révoquez rapidement les privilèges dès qu'ils ne sont plus requis.

Questions Fréquemment Posées

La leçon « Rôles et privilèges » est-elle gratuite ?

Oui — le texte complet de « Rôles et privilèges » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours SQL Academy, passe à CoddyKit PRO. Le cours SQL Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Rôles et privilèges » ?

Accordez et révoquez des accès avec GRANT et REVOKE. Tu pratiques SQL Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer SQL Academy ?

Aucune expérience préalable n'est requise. SQL Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Rôles et privilèges » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon SQL Academy ?

Oui. Chaque leçon SQL Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Rôles et privilèges
  2. Politiques de sécurité au niveau des lignes
  3. Autorisations au niveau des colonnes
  4. Auditer les accès
← Retour à SQL Academy