Skip to content

Gestion des Utilisateurs dans PostgreSQL

Dans PostgreSQL, les termes “utilisateur” et “rôle” sont souvent utilisés de manière interchangeable, mais il existe des différences subtiles. Un user est essentiellement un rôle avec la capacité de se connecter (l’option LOGIN), tandis qu’un role sans cette capacité est par défaut créé avec l’option NOLOGIN. Cette distinction permet de créer des rôles qui servent uniquement à regrouper des privilèges sans permettre la connexion directe à la base de données.

1. Création et Gestion des Comptes Utilisateurs

1.1. Création d’un Utilisateur

Pour créer un nouvel utilisateur dans PostgreSQL, vous utilisez la commande CREATE USER ou CREATE ROLE avec l’option LOGIN. Voici un exemple de création d’un utilisateur avec un mot de passe :

CREATE USER nom_utilisateur WITH PASSWORD 'mot_de_passe';

Exemple :

CREATE USER alice WITH PASSWORD 'password123';

1.2. Modification d’un Utilisateur

Pour modifier un utilisateur existant, vous pouvez utiliser la commande ALTER USER. Par exemple, pour changer le mot de passe d’un utilisateur :

ALTER USER nom_utilisateur WITH PASSWORD 'nouveau_mot_de_passe';

Exemple :

ALTER USER alice WITH PASSWORD 'newpassword456';

1.3. Suppression d’un Utilisateur

Pour supprimer un utilisateur, utilisez la commande DROP USER :

DROP USER nom_utilisateur;

Exemple :

DROP USER alice;

2. Modification de Mot de Passe dans PostgreSQL à partir du Terminal avec psql

Modifier un mot de passe dans PostgreSQL peut se faire de différentes manières selon si l’utilisateur souhaite changer son propre mot de passe ou si un administrateur souhaite changer le mot de passe d’un autre utilisateur. Voici comment procéder dans les deux cas, en utilisant psql.

2.1. Un Utilisateur qui Veut Modifier son Propre Mot de Passe

Pour qu’un utilisateur modifie son propre mot de passe sans l’écrire en clair dans une commande ALTER USER, il peut utiliser la commande \password dans psql. Cette commande invite l’utilisateur à entrer son nouveau mot de passe de manière sécurisée.

Voici les étapes :

  1. Ouvrez le terminal et connectez-vous à PostgreSQL en tant qu’utilisateur dont vous souhaitez modifier le mot de passe :

    psql -U nom_utilisateur -d nom_base_de_donnees
    

  2. Une fois connecté, exécutez la commande \password :

    \password
    

  3. PostgreSQL vous demandera d’entrer le nouveau mot de passe deux fois pour confirmation :

    Enter new password:
    Enter it again:
    

Exemple complet :

psql -U alice -d mydatabase
\password
Enter new password:
Enter it again:

2.2. Un Administrateur qui Veut Modifier le Mot de Passe d’un Autre Utilisateur

Pour qu’un administrateur modifie le mot de passe d’un autre utilisateur sans l’écrire en clair dans une commande ALTER USER, il peut utiliser la commande \password suivie du nom de l’utilisateur cible. Cela permet de modifier le mot de passe de l’utilisateur de manière sécurisée.

Voici les étapes :

1- Ouvrez le terminal et connectez-vous à PostgreSQL en tant qu’administrateur ( ou un utilisateur ayant les privilèges nécessaires) :

psql -U admin -d nom_base_de_donnees

2- Une fois connecté, exécutez la commande \password suivie du nom de l’utilisateur dont vous souhaitez modifier le mot de passe :

\password nom_utilisateur

3- PostgreSQL vous demandera d’entrer le nouveau mot de passe deux fois pour confirmation :

Enter new password:
Enter it again:

Exemple complet :

psql -U admin -d mydatabase
\password alice
Enter new password:
Enter it again:

3. Options de CREATE ROLE et CREATE USER

PostgreSQL offre plusieurs options lors de la création d’utilisateurs et de rôles pour spécifier leurs capacités et restrictions. Voici quelques-unes des options les plus courantes :

3.1. Options de CREATE ROLE

  • LOGIN/NOLOGIN : Spécifie si le rôle peut se connecter à la base de données.
  • SUPERUSER/NOSUPERUSER : Spécifie si le rôle a des privilèges superutilisateur.
  • CREATEDB/NOCREATEDB : Spécifie si le rôle peut créer des bases de données.
  • CREATEROLE/NOCREATEROLE : Spécifie si le rôle peut créer d’autres rôles.
  • INHERIT/NOINHERIT : Spécifie si le rôle hérite des privilèges des rôles auxquels il appartient.
  • REPLICATION/NOREPLICATION : Spécifie si le rôle peut initier des connexions de réplication.
  • CONNECTION LIMIT : Limite le nombre de connexions simultanées pour le rôle.

Exemple :

CREATE ROLE dev_team NOLOGIN;
CREATE ROLE admin WITH LOGIN SUPERUSER CREATEDB CREATEROLE;

3.2. Options de CREATE USER

Les options pour CREATE USER sont similaires à celles de CREATE ROLE, avec l’option LOGIN étant implicite :

  • PASSWORD : Définit le mot de passe pour l’utilisateur.
  • VALID UNTIL : Définit une date d’expiration pour le mot de passe.
  • CONNECTION LIMIT : Limite le nombre de connexions simultanées pour l’utilisateur.

Exemple :

CREATE USER alice WITH PASSWORD 'password123' VALID UNTIL '2024-12-31' CONNECTION LIMIT 5;

4. Privilèges

4.1. Privilèges de Base

Voici quelques privilèges de base que vous pouvez attribuer aux utilisateurs ou aux rôles :

  • SELECT : Permet de lire les données d’une table.
  • INSERT : Permet d’ajouter des données dans une table.
  • UPDATE : Permet de modifier les données d’une table.
  • DELETE : Permet de supprimer des données d’une table.
  • CREATE : Permet de créer de nouvelles tables ou bases de données.
  • DROP : Permet de supprimer des tables ou bases de données.

4.2. Attribution de Privilèges

Pour attribuer des privilèges à un utilisateur ou un rôle, utilisez la commande GRANT. Par exemple, pour donner des privilèges de lecture et d’écriture sur une table :

GRANT SELECT, INSERT, UPDATE, DELETE ON table_name TO nom_utilisateur;

Exemple :

GRANT SELECT, INSERT, UPDATE, DELETE ON employees TO alice;

5. Contrôle d’Accès

5.1. Contrôle d’Accès Basé sur les Rôles

PostgreSQL utilise le modèle de Contrôle d’Accès Basé sur les Rôles (RBAC). Les rôles peuvent être utilisés pour simplifier la gestion des privilèges. Par exemple, vous pouvez créer un rôle pour les développeurs et attribuer ce rôle à tous les utilisateurs qui sont des développeurs.

5.2. Exemple de Contrôle d’Accès

Supposons que vous avez une base de données avec plusieurs tables et que vous souhaitez gérer les accès de manière structurée :

1- Créer un rôle pour les développeurs :

CREATE ROLE dev_team;

2- Attribuer des privilèges au rôle :

GRANT SELECT, INSERT, UPDATE, DELETE ON employees TO dev_team;

3- Attribuer le rôle aux utilisateurs :

GRANT dev_team TO alice;
GRANT dev_team TO bob;

PostgreSQL et le RBAC

PostgreSQL utilise le RBAC pour gérer les permissions et les accès des utilisateurs. PostgreSQL implémente principalement le modèle de RBAC de Base (RBAC0), mais il supporte également certaines fonctionnalités avancées qui permettent de créer des hiérarchies de rôles, ce qui le rapproche du RBAC Hiérarchique (RBAC1).

Modèle de RBAC dans PostgreSQL

1. RBAC de Base (RBAC0)

Dans PostgreSQL, le RBAC de base permet d’assigner des rôles aux utilisateurs et de définir des permissions pour chaque rôle. Les utilisateurs héritent des permissions de leurs rôles. Voici comment cela fonctionne :

  • Rôles et Utilisateurs : PostgreSQL traite les rôles et les utilisateurs de manière interchangeable. Un utilisateur est simplement un rôle avec la capacité de se connecter (LOGIN).
  • Permissions : Les permissions sont attribuées aux rôles et peuvent inclure des actions comme SELECT, INSERT, UPDATE, DELETE, CREATE, et DROP.

2. RBAC Hiérarchique (RBAC1)

PostgreSQL supporte également des fonctionnalités de hiérarchie des rôles, permettant à un rôle d’hériter des permissions d’un autre rôle. Cela facilite la gestion des permissions en créant des rôles parents et enfants.

  • Héritage des Rôles : Les rôles peuvent être configurés pour hériter des permissions d’autres rôles en utilisant l’option INHERIT. Par défaut, les rôles sont créés avec l’option INHERIT.

Exemples d’Utilisation du RBAC dans PostgreSQL

Création de Rôles et Attribution de Permissions

1- Créer des rôles :

CREATE ROLE dev_team;
CREATE ROLE qa_team;
CREATE ROLE admin_team WITH LOGIN SUPERUSER;

2- Attribuer des privilèges aux rôles :

GRANT SELECT, INSERT, UPDATE, DELETE ON employees TO dev_team;
GRANT SELECT ON employees TO qa_team;

3- Créer des utilisateurs et attribuer des rôles :

CREATE USER alice WITH PASSWORD 'password123';
CREATE USER bob WITH PASSWORD 'password456';
GRANT dev_team TO alice;
GRANT qa_team TO bob;

Héritage des Permissions

1- Créer un rôle parent et un rôle enfant :

CREATE ROLE senior_dev INHERIT;
GRANT dev_team TO senior_dev;

2- Attribuer le rôle enfant à un utilisateur :

CREATE USER charlie WITH PASSWORD 'password789';
GRANT senior_dev TO charlie;

Dans cet exemple, charlie hérite des permissions du rôle dev_team via le rôle senior_dev.

Conclusion

La gestion des utilisateurs dans PostgreSQL est flexible et puissante grâce à l’utilisation des rôles et des privilèges. En suivant les bonnes pratiques de gestion des utilisateurs et des privilèges, vous pouvez assurer une sécurité robuste et une administration efficace de votre base de données.


Utilisation de l’IA

Page rédigée en partie avec l’aide d’un assistant IA. L’IA a été utilisée pour générer des explications, des exemples et/ou des suggestions de structure. Toutes les informations ont été vérifiées, éditées et complétées par l’auteur.