Skip to content

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.


Dans PostgreSQL, les concepts d’utilisateur (USER) et de rôle (ROLE) sont essentiellement identiques. La seule différence est que :

  • CREATE USER crée un rôle avec l’option LOGIN activée par défaut.
  • CREATE ROLE crée un rôle sans l’option LOGIN (ne peut pas se connecter).

💡 Bon à savoir : PostgreSQL utilise le terme ROLE pour 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 :

\du

ou en SQL :

SELECT rolname, rolsuper, rolcreaterole, rolcreatedb, rolcanlogin
FROM pg_roles
ORDER BY rolname;

CREATE ROLE nom [ [ WITH ] option [ ... ] ]

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.
-- 1. Utilisateur standard avec login et mot de passe
CREATE USER jean WITH LOGIN ENCRYPTED PASSWORD 'MotDePasse123';
-- 2. Utilisateur avec création de bases
CREATE USER sophie WITH LOGIN CREATEDB ENCRYPTED PASSWORD 'sophie123';
-- 3. Utilisateur avec limitation des connexions
CREATE USER limited_user WITH LOGIN CONNECTION LIMIT 5 ENCRYPTED PASSWORD 'limited123';
-- 4. Utilisateur avec date d'expiration
CREATE 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 : SUPERUSER donne 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.


ALTER ROLE nom [ [ WITH ] option [ ... ] ]
ALTER ROLE nom RENAME TO nouveau_nom
ALTER ROLE nom SET param_config = 'valeur'
ALTER ROLE nom RESET param_config
-- Modifier le mot de passe
ALTER USER jean WITH ENCRYPTED PASSWORD 'NouveauMotDePasse456';
-- Ajouter la possibilité de créer des bases
ALTER USER sophie CREATEDB;
-- Supprimer la possibilité de créer des bases
ALTER USER sophie NOCREATEDB;
-- Augmenter la limite de connexions
ALTER USER limited_user CONNECTION LIMIT 10;
-- Renommer un utilisateur
ALTER 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ètre
ALTER USER jean_dupont RESET search_path;

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 CASCADE ou 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ôle
REASSIGN OWNED BY jean_dupont TO sophie;
-- Supprimer les droits restants
DROP OWNED BY jean_dupont;
-- Supprimer le rôle
DROP USER jean_dupont;

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êtes
GRANT pg_signal_backend TO jean_dupont;

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ées
CREATE ROLE lecture NOLOGIN;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO lecture;
-- Créer un groupe 'ecriture' qui permet de modifier les données
CREATE ROLE ecriture NOLOGIN;
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO ecriture;
-- Ajouter jean_dupont au groupe lecture (hérite des droits)
GRANT lecture TO jean_dupont;
-- Ajouter sophie aux deux groupes
GRANT lecture, ecriture TO sophie;
-- Lister les membres d'un rôle
SELECT * FROM pg_auth_members WHERE roleid = (SELECT oid FROM pg_roles WHERE rolname = 'lecture');
-- Lister les rôles dont un utilisateur est membre
SELECT rolname FROM pg_roles WHERE oid IN (
SELECT roleid FROM pg_auth_members WHERE member = (SELECT oid FROM pg_roles WHERE rolname = 'jean_dupont')
);

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éritage
CREATE ROLE audit NOLOGIN NOINHERIT;
GRANT SELECT ON logs TO audit;
-- Ajouter un utilisateur au rôle sans héritage
GRANT audit TO jean_dupont;
-- jean_dupont n'a PAS les droits du rôle audit (car NOINHERIT)
-- Pour les activer explicitement
SET ROLE audit;
-- Maintenant, jean_dupont a les droits du rôle audit

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

Dans postgresql.conf :

# Utiliser SCRAM-SHA-256
password_encryption = scram-sha-256
# Utiliser MD5
password_encryption = md5

Cré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 serveur

-- 1. Créer un rôle applicatif (sans login) pour définir les droits
CREATE 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'application
CREATE USER app_user WITH LOGIN ENCRYPTED PASSWORD 'app_secure_password';
-- 3. Ajouter l'utilisateur au rôle
GRANT 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 seule
CREATE 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'analyste
CREATE USER marie WITH LOGIN ENCRYPTED PASSWORD 'marie_secure';
-- 3. Ajouter l'analyste au rôle
GRANT analyste TO marie;
-- Créer un utilisateur avec des droits limités de DBA
CREATE USER dba_junior WITH LOGIN CREATEDB CREATEROLE ENCRYPTED PASSWORD 'junior_secure';
-- Ajouter au rôle de monitoring
GRANT 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 maintenance
CREATE 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;

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.

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;

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