Utilisateurs et rôles – Gestion des comptes et des privilèges
Bonne lecture et bon apprentissage !
Junior TSAFACK – 20/08/2026
⏱️ Temps de lecture estimé : 9 minutes
La gestion des utilisateurs et des rôles est un aspect fondamental de l’administration d’une base de données PostgreSQL. Elle permet de contrôler qui peut se connecter, quelles actions ils peuvent effectuer, et sur quels objets. Dans ce cours, vous apprendrez à créer, modifier et supprimer des utilisateurs et des rôles, ainsi qu’à gérer les options qui définissent leurs privilèges.
Utilisateurs vs Rôles
Section titled “Utilisateurs vs Rôles”Dans PostgreSQL, les concepts d’utilisateur (USER) et de rôle (ROLE) sont essentiellement identiques. La seule différence est que :
CREATE USERcrée un rôle avec l’optionLOGINactivée par défaut.CREATE ROLEcrée un rôle sans l’optionLOGIN(ne peut pas se connecter).
💡 Bon à savoir : PostgreSQL utilise le terme
ROLEpour désigner à la fois les utilisateurs et les groupes de droits. Cela simplifie la gestion des permissions : un rôle peut être un utilisateur, un groupe, ou les deux.
Liste des rôles :
\duou en SQL :
SELECT rolname, rolsuper, rolcreaterole, rolcreatedb, rolcanloginFROM pg_rolesORDER BY rolname;Création d’un rôle / utilisateur
Section titled “Création d’un rôle / utilisateur”Syntaxe complète
Section titled “Syntaxe complète”CREATE ROLE nom [ [ WITH ] option [ ... ] ]où option peut être :
| Option | Description |
|---|---|
SUPERUSER / NOSUPERUSER |
Peut tout faire (contourne toutes les vérifications de droits). À utiliser avec une extrême prudence. |
CREATEDB / NOCREATEDB |
Peut créer des bases de données. |
CREATEROLE / NOCREATEROLE |
Peut créer, modifier et supprimer d’autres rôles. |
INHERIT / NOINHERIT |
Hérite des privilèges des rôles dont il est membre. |
LOGIN / NOLOGIN |
Peut se connecter à l’instance. |
REPLICATION / NOREPLICATION |
Peut initier des flux de réplication (streaming). |
BYPASSRLS / NOBYPASSRLS |
Contourne les politiques de sécurité au niveau des lignes (RLS). |
CONNECTION LIMIT |
Nombre maximum de connexions simultanées (-1 = illimité). |
[ENCRYPTED] PASSWORD 'motdepasse' |
Définit le mot de passe (chiffré avec l’algorithme MD5 ou SCRAM-SHA-256). |
PASSWORD NULL |
Supprime le mot de passe. |
VALID UNTIL 'timestamp' |
Date d’expiration du compte. |
IN ROLE |
Ajoute le nouveau rôle comme membre des rôles existants. |
ROLE |
Ajoute les rôles existants comme membres du nouveau rôle. |
ADMIN |
Ajoute les rôles existants comme administrateurs du nouveau rôle. |
Exemples de création
Section titled “Exemples de création”-- 1. Utilisateur standard avec login et mot de passeCREATE USER jean WITH LOGIN ENCRYPTED PASSWORD 'MotDePasse123';
-- 2. Utilisateur avec création de basesCREATE USER sophie WITH LOGIN CREATEDB ENCRYPTED PASSWORD 'sophie123';
-- 3. Utilisateur avec limitation des connexionsCREATE USER limited_user WITH LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD 'limited123';
-- 4. Utilisateur avec date d'expirationCREATE USER temporaire WITH LOGIN ENCRYPTED PASSWORD 'temp123' VALID UNTIL '2025-01-01';
-- 5. Rôle sans login (groupe de droits)CREATE ROLE administrateur NOLOGIN CREATEROLE CREATEDB;
-- 6. Superutilisateur (seulement pour les administrateurs système)CREATE USER admin WITH SUPERUSER ENCRYPTED PASSWORD 'admin123';⚠️ Avertissement :
SUPERUSERdonne des droits illimités. Évitez de l’utiliser pour des applications quotidiennes. Seul un nombre très restreint de comptes devrait avoir ce privilège.
Modifier un rôle / utilisateur
Section titled “Modifier un rôle / utilisateur”Syntaxe
Section titled “Syntaxe”ALTER ROLE nom [ [ WITH ] option [ ... ] ]ALTER ROLE nom RENAME TO nouveau_nomALTER ROLE nom SET param_config = 'valeur'ALTER ROLE nom RESET param_configExemples
Section titled “Exemples”-- Modifier le mot de passeALTER USER jean WITH ENCRYPTED PASSWORD 'NouveauMotDePasse456';
-- Ajouter la possibilité de créer des basesALTER USER sophie CREATEDB;
-- Supprimer la possibilité de créer des basesALTER USER sophie NOCREATEDB;
-- Augmenter la limite de connexionsALTER USER limited_user CONNECTION LIMIT 10;
-- Renommer un utilisateurALTER USER jean RENAME TO jean_dupont;
-- Définir un paramètre de configuration pour une session (ex : search_path)ALTER USER jean_dupont SET search_path = 'public, magasin';
-- Réinitialiser un paramètreALTER USER jean_dupont RESET search_path;Supprimer un rôle / utilisateur
Section titled “Supprimer un rôle / utilisateur”DROP ROLE nom;DROP USER nom; -- équivalent
-- Supprimer un rôle qui possède encore des objets (nécessite CASCADE)DROP ROLE jean_dupont CASCADE;⚠️ Attention : Vous ne pouvez pas supprimer un rôle qui est le propriétaire d’objets (tables, vues, fonctions) à moins d’utiliser
CASCADEou de transférer d’abord la propriété.
Transférer la propriété avant suppression
Section titled “Transférer la propriété avant suppression”-- Transférer la propriété des objets à un autre rôleREASSIGN OWNED BY jean_dupont TO sophie;
-- Supprimer les droits restantsDROP OWNED BY jean_dupont;
-- Supprimer le rôleDROP USER jean_dupont;Les rôles système par défaut
Section titled “Les rôles système par défaut”PostgreSQL crée quelques rôles système par défaut :
| Rôle | Description |
|---|---|
postgres |
Superutilisateur par défaut. Propriétaire de toutes les bases système. |
pg_signal_backend |
Peut envoyer des signaux à d’autres processus (ex : annuler une requête). |
pg_read_server_files |
Peut lire des fichiers sur le serveur via des fonctions comme pg_read_file(). |
pg_write_server_files |
Peut écrire des fichiers sur le serveur. |
pg_execute_server_program |
Peut exécuter des programmes sur le serveur. |
pg_monitor |
Peut consulter les statistiques et les vues système (ex : pg_stat_activity). |
💡 Bon à savoir : Ces rôles pré-définis sont très utiles pour accorder des permissions granulaires sans donner de droits excessifs.
Exemple d’attribution d’un rôle système
Section titled “Exemple d’attribution d’un rôle système”-- Permettre à l'utilisateur sophie de surveiller l'activitéGRANT pg_monitor TO sophie;
-- Permettre à l'utilisateur jean_dupont d'annuler les requêtesGRANT pg_signal_backend TO jean_dupont;L’héritage des rôles
Section titled “L’héritage des rôles”L’héritage permet à un rôle de bénéficier des droits d’un autre rôle. C’est l’équivalent des groupes dans d’autres bases de données.
Création d’un groupe (rôle sans login)
Section titled “Création d’un groupe (rôle sans login)”-- Créer un groupe 'lecture' qui permet de lire les donnéesCREATE ROLE lecture NOLOGIN;GRANT SELECT ON ALL TABLES IN SCHEMA public TO lecture;
-- Créer un groupe 'ecriture' qui permet de modifier les donnéesCREATE ROLE ecriture NOLOGIN;GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO ecriture;Ajout d’un utilisateur à un groupe
Section titled “Ajout d’un utilisateur à un groupe”-- Ajouter jean_dupont au groupe lecture (hérite des droits)GRANT lecture TO jean_dupont;
-- Ajouter sophie aux deux groupesGRANT lecture, ecriture TO sophie;Vérifier l’appartenance
Section titled “Vérifier l’appartenance”-- Lister les membres d'un rôleSELECT * FROM pg_auth_members WHERE roleid = (SELECT oid FROM pg_roles WHERE rolname = 'lecture');
-- Lister les rôles dont un utilisateur est membreSELECT rolname FROM pg_roles WHERE oid IN ( SELECT roleid FROM pg_auth_members WHERE member = (SELECT oid FROM pg_roles WHERE rolname = 'jean_dupont'));Héritage vs NOINHERIT
Section titled “Héritage vs NOINHERIT”Par défaut, les rôles héritent (INHERIT) des droits des rôles dont ils sont membres. Cela signifie qu’ils peuvent utiliser ces privilèges sans avoir à les activer explicitement.
-- Créer un rôle sans héritageCREATE ROLE audit NOLOGIN NOINHERIT;GRANT SELECT ON logs TO audit;
-- Ajouter un utilisateur au rôle sans héritageGRANT audit TO jean_dupont;
-- jean_dupont n'a PAS les droits du rôle audit (car NOINHERIT)-- Pour les activer explicitementSET ROLE audit;-- Maintenant, jean_dupont a les droits du rôle auditGestion des mots de passe
Section titled “Gestion des mots de passe”Méthodes de hachage
Section titled “Méthodes de hachage”PostgreSQL supporte deux méthodes de hachage des mots de passe :
| Méthode | Description | Sécurité |
|---|---|---|
| MD5 | Hachage MD5 du mot de passe. Défaut avant PostgreSQL 14. | Moyenne (MD5 est considéré comme faible) |
| SCRAM-SHA-256 | Méthode moderne, plus sécurisée. Par défaut depuis PostgreSQL 14. | Élevée |
Configuration de la méthode de hachage
Section titled “Configuration de la méthode de hachage”Dans postgresql.conf :
# Utiliser SCRAM-SHA-256password_encryption = scram-sha-256
# Utiliser MD5password_encryption = md5Créer un utilisateur avec SCRAM-SHA-256 (explicite)
Section titled “Créer un utilisateur avec SCRAM-SHA-256 (explicite)”CREATE USER jean_dupont WITH LOGIN PASSWORD 'MotDePasse123';-- Utilise la méthode définie par password_encryption-- Forcer une méthode spécifique (non recommandé en pratique)CREATE USER sophie WITH LOGIN ENCRYPTED PASSWORD 'sophie123';-- 'ENCRYPTED' utilise la méthode par défaut du serveurExemples de scénarios d’administration
Section titled “Exemples de scénarios d’administration”Scénario 1 : Application web
Section titled “Scénario 1 : Application web”-- 1. Créer un rôle applicatif (sans login) pour définir les droitsCREATE ROLE app_standard NOLOGIN;GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO app_standard;GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO app_standard;
-- 2. Créer l'utilisateur de l'applicationCREATE USER app_user WITH LOGIN ENCRYPTED PASSWORD 'app_secure_password';
-- 3. Ajouter l'utilisateur au rôleGRANT app_standard TO app_user;Scénario 2 : Analyste de données (lecture seule)
Section titled “Scénario 2 : Analyste de données (lecture seule)”-- 1. Créer un rôle lecture seuleCREATE ROLE analyste NOLOGIN;GRANT SELECT ON ALL TABLES IN SCHEMA public TO analyste;GRANT SELECT ON ALL TABLES IN SCHEMA reporting TO analyste;
-- 2. Créer l'analysteCREATE USER marie WITH LOGIN ENCRYPTED PASSWORD 'marie_secure';
-- 3. Ajouter l'analyste au rôleGRANT analyste TO marie;Scénario 3 : DBA junior
Section titled “Scénario 3 : DBA junior”-- Créer un utilisateur avec des droits limités de DBACREATE USER dba_junior WITH LOGIN CREATEDB CREATEROLE ENCRYPTED PASSWORD 'junior_secure';
-- Ajouter au rôle de monitoringGRANT pg_monitor TO dba_junior;Scénario 4 : Compte de maintenance (sans login)
Section titled “Scénario 4 : Compte de maintenance (sans login)”-- Créer un rôle pour les scripts de maintenanceCREATE ROLE maintenance NOLOGIN;GRANT SELECT, INSERT, UPDATE ON logs TO maintenance;GRANT USAGE ON ALL SEQUENCES IN SCHEMA public TO maintenance;
-- Les scripts peuvent utiliser SET ROLE maintenance;Bonnes pratiques de sécurité
Section titled “Bonnes pratiques de sécurité”| Pratique | Description |
|---|---|
| Principe du moindre privilège | Donnez le minimum de droits nécessaires à chaque utilisateur. |
| Éviter SUPERUSER | Seuls 1-2 comptes d’administration devraient avoir SUPERUSER. |
| Utiliser SCRAM-SHA-256 | Configurez password_encryption = scram-sha-256 dans postgresql.conf. |
| Mots de passe forts | Utilisez des mots de passe d’au moins 12 caractères, avec des lettres, chiffres et symboles. |
| Rotation des mots de passe | Changez périodiquement les mots de passe. |
| Limiter les connexions | Utilisez CONNECTION LIMIT pour éviter la saturation. |
| Audit régulier | Consultez pg_roles et pg_auth_members pour vérifier les attributions. |
| Utiliser des rôles sans login | Pour les groupes, utilisez NOLOGIN et INHERIT. |
| Supprimer les comptes inactifs | Nettoyez régulièrement les comptes désuets. |
| Expiration des comptes | Utilisez VALID UNTIL pour les comptes temporaires. |
Commandes récapitulatives
Section titled “Commandes récapitulatives”| Action | Commande |
|---|---|
| Créer un rôle | CREATE ROLE nom [OPTIONS]; |
| Créer un utilisateur (avec login) | CREATE USER nom [OPTIONS]; |
| Modifier un rôle | ALTER ROLE nom [OPTIONS]; |
| Supprimer un rôle | DROP ROLE nom [CASCADE]; |
| Transférer la propriété | REASSIGN OWNED BY ancien TO nouveau; |
| Supprimer les droits d’un rôle | DROP OWNED BY nom; |
| Ajouter un rôle à un autre | GRANT role1 TO role2; |
| Retirer un rôle | REVOKE role1 FROM role2; |
| Activer un rôle (NOINHERIT) | SET ROLE nom; |
| Désactiver le rôle | RESET ROLE; |
| Afficher les rôles | \du ou \du+ |
| Afficher le rôle actif | SELECT current_role; |
Prochain chapitre
Section titled “Prochain chapitre”Vous savez maintenant gérer les utilisateurs et les rôles. Dans le prochain cours, nous aborderons la gestion des droits (GRANT/REVOKE) sur les différents objets : bases de données, schémas, tables et colonnes.
👉 Cours 9 : Gestion des droits – GRANT et REVOKE
Junior TSAFACK – 20/08/2026