CodeGym /Cours /SQL SELF /Création et gestion des rôles : ROLES

Création et gestion des rôles : ROLES

SQL SELF
Niveau 47 , Leçon 1
Disponible

Un rôle dans PostgreSQL peut représenter soit un utilisateur individuel, soit un groupe d'utilisateurs. Il gère l'accès aux bases de données, aux tables, aux schémas et à d'autres objets.

Quand tu crées un rôle, il n'est pas lié par défaut à un utilisateur ou à un groupe spécifique, mais tu peux lui attribuer des propriétés et des droits selon tes besoins.

Différence entre rôles et utilisateurs

Et les utilisateurs alors ? Faut pas confondre ! Dans PostgreSQL, les utilisateurs sont aussi considérés comme des rôles, mais avec une particularité : les utilisateurs ont toujours la possibilité de se connecter au système. Donc, chaque rôle peut être un utilisateur s'il a l'attribut LOGIN. Si tu veux juste regrouper des utilisateurs ou ne pas donner la possibilité de se connecter, tu n'ajoutes pas l'attribut LOGIN.

Exemple :

  • Rôle avec l'attribut LOGIN = utilisateur.
  • Rôle sans LOGIN = groupe ou "rôle technique".

Créer un rôle

Pour créer des rôles, on utilise la commande CREATE ROLE. La syntaxe ressemble à ça :

CREATE ROLE <nom_du_rôle> [WITH] [paramètres];

paramètres — ce sont les propriétés du rôle, comme :

  • LOGIN — possibilité de se connecter à la base de données.
  • CREATEDB — possibilité de créer des bases de données.
  • CREATEROLE — possibilité de créer d'autres rôles.
  • SUPERUSER — accès complet (les rôles les plus dangereux, à utiliser avec précaution).
  • PASSWORD — mot de passe pour l'authentification.

Voyons un exemple de création d'un rôle utilisateur.
Supposons que tu veuilles créer un utilisateur student avec le droit de se connecter et un mot de passe. Pour ça, lance la requête suivante :

CREATE ROLE student WITH LOGIN PASSWORD 'securePassword123';

Cette commande va créer un rôle nommé student qui pourra se connecter à la base de données.

Maintenant, créons un rôle teachers qui sera un groupe. Un rôle de groupe n'a pas besoin de l'attribut LOGIN, car les utilisateurs du groupe utiliseront leurs propres comptes.

CREATE ROLE teachers;

Attribution des privilèges aux rôles

Les rôles dans PostgreSQL sont faits pour donner ou limiter l'accès aux ressources. Pour ça, on utilise les commandes GRANT et REVOKE.

Donner des droits avec GRANT

La syntaxe de la commande :

GRANT <privilèges> ON <objet> TO <rôle>;

Créons une table courses et donnons au rôle teachers les droits de lire et modifier les données dans cette table.

-- Créer la table
CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    teacher_id INT
);

-- Donner l'accès
GRANT SELECT, INSERT, UPDATE ON courses TO teachers;

Maintenant, tous les utilisateurs du rôle teachers pourront voir, ajouter et modifier les données dans la table.

Retirer des droits avec REVOKE

Pour retirer des droits, on utilise la commande REVOKE. La syntaxe :

REVOKE <privilèges> ON <objet> FROM <rôle>;

Pour interdire au groupe teachers de modifier les données dans la table courses, exécute la commande :

REVOKE UPDATE ON courses FROM teachers;

Hiérarchie des rôles : héritage

Les utilisateurs peuvent "hériter" des privilèges d'un rôle-groupe pour simplifier la gestion. C'est comme transmettre un "héritage" d'un utilisateur à un autre.

Le mot-clé INHERIT permet à un rôle d'hériter des privilèges d'un autre rôle. Ce comportement est activé par défaut, mais tu peux le changer.

Exemple :

-- Ajouter l'utilisateur `john` au groupe `teachers`
GRANT teachers TO john;

Maintenant, l'utilisateur john aura automatiquement tous les privilèges attribués au rôle de groupe teachers.

Vérifions les privilèges :

\du john

Si tu veux désactiver l'héritage, crée le rôle avec l'attribut NOINHERIT.

CREATE ROLE admin NOINHERIT;

Maintenant, les utilisateurs du rôle admin ne pourront pas utiliser ses privilèges par défaut.

Créer des groupes de rôles pour gérer les accès

Les groupes de rôles simplifient la gestion des accès, surtout dans les gros projets. Au lieu de donner des droits à chaque utilisateur, tu ajoutes les utilisateurs dans des groupes, et tu donnes les droits aux groupes.

Voici un exemple simple de rôle de groupe. On va créer les groupes :

  • students — groupe pour les étudiants.
  • teachers — groupe pour les enseignants.
CREATE ROLE students;
CREATE ROLE teachers;

Attribuons les utilisateurs aux groupes :

-- Ajouter l'utilisateur john au groupe students
GRANT students TO john;

-- Ajouter l'utilisateur jane au groupe teachers
GRANT teachers TO jane;

Maintenant, en donnant l'accès à la table aux groupes students et teachers, on le donne automatiquement à tous leurs membres !

Exercice pratique

  1. Crée une table exams avec les champs :
    • id : clé primaire ;
    • subject : texte ;
    • teacher_id : ID de l'enseignant.
CREATE TABLE exams (
    id SERIAL PRIMARY KEY,
    subject TEXT NOT NULL,
    teacher_id INT
);
  1. Crée les groupes de rôles students et teachers.
CREATE ROLE students;
CREATE ROLE teachers;
  1. Donne au groupe teachers les droits d'ajouter et de modifier des données dans la table exams.
GRANT INSERT, UPDATE ON exams TO teachers;
  1. Donne au groupe students uniquement le droit de lire les données.
GRANT SELECT ON exams TO students;
  1. Crée un utilisateur alice et ajoute-la au groupe students.
CREATE ROLE alice WITH LOGIN PASSWORD 'alicePassword';
GRANT students TO alice;
  1. Vérifie quels droits a alice en te connectant avec son compte.

Maintenant tu sais comment créer des rôles, gérer leurs privilèges et simplifier l'administration avec des rôles de groupe. Dans la prochaine leçon, on verra comment configurer l'accès avec les commandes GRANT et REVOKE pour une gestion plus fine au niveau des bases de données, des schémas et des tables.

Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION