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
  1. Une fois connecté, exécutez la commande \password :
\password
  1. 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 et Révocation 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;

Pour retirer des privilèges précédemment accordés, utilisez la commande REVOKE :

REVOKE INSERT, UPDATE, DELETE ON employees FROM alice;

5. Contrôle d’Accès et Rôles

5.1. Utilisation des Rôles pour Gérer les Permissions

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 Gestion des 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;

5.3. Héritage des Rôles

PostgreSQL permet à 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.

Exemple d’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.