Présentation
La gestion des privilèges utilisateur et des accès privilégiés est un concept de sécurité crucial pour tout type de base de données. PostgreSQL gère le contrôle d'accès via des rôles et des privilèges. Par exemple, l'ajout de l'autorisation LOGIN à un rôle génère un utilisateur. Postgres propose plusieurs façons de créer et de gérer des comptes d'utilisateurs.
Ce didacticiel montre comment créer et configurer différents types d'utilisateurs pour une base de données PostgreSQL.
Prérequis
- Postgres installé (suivez notre guide pour Ubuntu ou Windows).
- Accès au terminal avec les privilèges sudo.
- Accès à l'utilisateur postgres.
Créer un nouvel utilisateur dans PostgreSQL
Il existe deux façons de créer un nouvel utilisateur dans PostgreSQL, et les deux cas nécessitent l'accès à postgres utilisateur.
Méthode 1 :Utilisation de l'utilitaire client createuser
La première façon de créer un nouvel utilisateur est avec le createuser
utilitaire client. Cette méthode évite de se connecter à l'interface de ligne de commande PSQL.
Pour créer l'utilisateur, exécutez la commande suivante dans le terminal :
sudo -u postgres createuser <name>
Le terminal n'émet pas de message. Pour faire écho au message du serveur, ajoutez le -e
balise :
sudo -u postgres createuser -e <name>
Par exemple :
sudo -u postgres createuser -e john
Vous pouvez également diviser la commande en deux parties :
1. Basculez vers postgres utilisateur :
sudo su - postgres
2. Exécutez le createuser
commande :
createuser <name>
Postgres crée automatiquement l'utilisateur (rôle avec autorisations de connexion) dans les deux cas.
Méthode 2 :Utiliser PSQL
La deuxième façon de créer un nouvel utilisateur dans PostgreSQL consiste à utiliser le shell PSQL interactif.
1. Basculez vers postgres user et lancez la borne interactive avec :
sudo -u postgres psql
La session du terminal passe à postgres=#
, indiquant une connexion réussie au shell Postgres.
2. Utilisez l'instruction suivante pour créer un utilisateur :
CREATE USER <name>;
Par exemple :
CREATE USER mary;
L'exécution de la commande imprime CREATE ROLE
à la console. La raison est que le CREATE USER
query est un alias pour la commande suivante :
CREATE ROLE <name> WITH LOGIN;
Les deux requêtes donnent le même résultat.
Créer un superutilisateur dans PostgreSQL
Pour créer un superutilisateur dans PostgreSQL, vous devez avoir le rôle de superutilisateur.
Avertissement : Un superutilisateur de base de données contourne toutes les vérifications, ce qui est dangereux du point de vue de la sécurité. Utilisez cette action avec précaution et évitez de travailler avec un compte superutilisateur sauf en cas d'absolue nécessité.
Il existe deux manières de créer un superutilisateur dans PostgreSQL :
1. Créez un rôle de superutilisateur via l'utilitaire client en ajoutant le --superuser
balise :
sudo -u postgres createuser --superuser <name>
Ou utilisez la balise abrégée -s
au lieu de --superuser
:
sudo -u postgres createuser -s <name>
Le terminal émet un message en cas d'erreur ou si l'utilisateur existe déjà. En cas de succès, aucun message ne s'affiche.
2. Vous pouvez également utiliser le CREATE USER
Instruction PSQL :
CREATE USER <name> SUPERUSER;
Le CREATE USER
instruction est un alias pour l'instruction suivante :
CREATE ROLE <name> LOGIN SUPERUSER;
Le CREATE ROLE
l'instruction nécessite l'ajout du LOGIN
autorisation d'émuler un utilisateur.
Créer un mot de passe pour l'utilisateur
Chaque utilisateur de la base de données doit avoir un mot de passe fort pour empêcher les attaques par force brute. PostgreSQL propose deux méthodes pour créer un utilisateur avec un mot de passe.
Avertissement : Parmi les deux méthodes, la première est préférée et la plus sécurisée.
1. Utilisez le createuser
utilitaire client et ajoutez le --pwprompt
option pour invoquer automatiquement une invite de création de mot de passe :
sudo -u postgres createuser <name> --pwprompt
La version abrégée est le -P
balise :
sudo -u postgres createuser <name> -P
Le terminal demande d'entrer le mot de passe deux fois. Le mot de passe lui-même ou la longueur est crypté et masqué lors de la communication avec le serveur.
2. Utilisez PSQL pour créer un utilisateur avec un mot de passe :
CREATE USER <name> WITH PASSWORD '<password>';
Si l'utilisateur existe déjà, ajoutez le mot de passe en utilisant ALTER USER
:
ALTER USER <name> WITH PASSWORD '<password>';
La gestion des mots de passe via PSQL comporte trois failles de sécurité :
- Le mot de passe est visible à l'écran.
- L'affichage de l'historique des commandes expose le mot de passe.
- Les informations sont transmises en texte clair sans aucun cryptage.
Utilisez cette méthode avec prudence.
Accorder des privilèges à l'utilisateur
Par défaut, les nouveaux utilisateurs n'ont aucun privilège à l'exception de la connexion. Pour ajouter des privilèges lors de la création d'un utilisateur, exécutez le createuser
utilitaire client au format suivant :
createuser <option> <name>
Pour faire la même chose dans PSQL, exécutez :
CREATE USER <name> WITH <option>;
Vous trouverez ci-dessous un tableau avec les options couramment utilisées pour les deux méthodes.
Syntaxe des options | PSQL | Explication |
---|---|---|
-s --superuser | SUPERUSER | Ajouter le privilège de superutilisateur. |
-S --no-superuser | NOSUPERUSER | Aucun privilège de superutilisateur (par défaut). |
-d --createdb | CREATEDB | Permet à l'utilisateur de créer des bases de données. |
-D --no-createdb | NOCREATEDB | Non autorisé à créer des bases de données (par défaut). |
-r --createrole | CREATEROLE | Permet à l'utilisateur de créer de nouveaux rôles. |
-R --no-createrole | NOCREATEROLE | Non autorisé à créer des rôles (par défaut). |
-i --inherit | INHERIT | Hériter automatiquement des privilèges des rôles (par défaut). |
-I --no-inherit | NOINHERIT | N'héritez pas des privilèges des rôles. |
-l --login | LOGIN | Permet à l'utilisateur de se connecter à une session avec le nom de rôle (par défaut). |
-L --no-login | NOLOGIN | Non autorisé à se connecter à une session avec le nom de rôle. |
--replication | REPLICATION | Permet de lancer la réplication en continu et d'activer/désactiver le mode de sauvegarde. |
--no-replication | NOREPLICATION | Non autorisé à lancer la réplication en continu ou le mode de sauvegarde (par défaut). |
-P --pwprompt | PASSWORD '<password>' | Lance l'invite de création de mot de passe ou ajoute le mot de passe fourni à l'utilisateur. Évitez d'utiliser cette option pour créer un utilisateur sans mot de passe. |
/ | PASSWORD NULL | Définit spécifiquement le mot de passe sur null. Chaque authentification par mot de passe échoue pour cet utilisateur. |
-c <number> --connection-limit=<number> | CONNECTION LIMIT <number> | Définit le nombre maximum de connexions pour l'utilisateur. La valeur par défaut est sans limite. |
Par exemple, créez un utilisateur avec des privilèges de création de rôle et de base de données et ajoutez le -e
balise pour faire écho aux résultats :
sudo -u postgres createuser -d -r -e <name>
Ou utilisez l'équivalent PSQL :
CREATE USER <name> WITH CREATEROLE CREATEDB;
Dans les deux cas, les privilèges indiqués sont automatiquement accordés au nouvel utilisateur.
Créer un utilisateur PostgreSQL de manière interactive
La création interactive d'utilisateurs est une option pratique disponible uniquement pour l'utilitaire client. Pour créer un utilisateur de manière interactive, exécutez la commande suivante :
sudo -u postgres createuser --interactive
La commande affiche automatiquement une série de questions, demandant ce qui suit :
- Nom du rôle.
- Si le rôle est un superutilisateur.
- Si l'utilisateur est autorisé à créer des bases de données.
- Si l'utilisateur est autorisé à créer d'autres rôles.
Répondez oui (y
) à la question du superutilisateur pour ajouter automatiquement les privilèges "créer une base de données" et "créer un rôle" et mettre fin à l'invite.
Répertorier tous les utilisateurs dans PostgreSQL
Un outil essentiel pour la gestion des utilisateurs dans les bases de données répertorie tous les utilisateurs avec leurs rôles et privilèges respectifs.
Pour répertorier tous les utilisateurs dans PostgreSQL, procédez comme suit :
1. Connectez-vous à l'invite PSQL en tant qu'utilisateur postgres :
sudo -u postgres psql
2. Listez tous les utilisateurs avec la commande suivante :
\du
La sortie affiche un tableau avec les noms de rôle, les attributs (privilèges) et les groupes d'utilisateurs. Pour afficher la description de chaque rôle, ajoutez le plus (+
) signe :
\du+
La sortie affiche une colonne supplémentaire avec la description du rôle, le cas échéant.