Il existe plusieurs méthodes d'authentification basées sur un mot de passe. Ces méthodes opèrent de façon similaire mais diffèrent sur la façon dont les mots de passe des utilisateurs sont enregistrés sur le serveur et comment le mot de passe fourni par un client est envoyé au serveur.
scram-sha-256
La méthode scram-sha-256
réalise une
authentification SCRAM-SHA-256, tel qu'elle est décrite dans la RFC 7677. Il s'agit
d'un système de question/réponse qui empêche la récupération du mot de
passe sur des connexions non sécurisées et supporte l'enregistrement
des mots de passe sur le serveur avec un hachage cryptographique
normalement sécurisé.
C'est actuellement la méthode interne la plus sécurisée, mais elle n'est pas supportée par les anciennes bibliothèques clients.
md5
La méthode md5
utilise un mécanisme de
question/réponse moins sécurisé. Il empêche la récupération du mot de
passe et évite d'enregistrer les mots de passe en clair sur le serveur,
mais ne fournit aucune protection si l'attaquant réussit à voler le mot
de passe haché du serveur. De plus, l'algorithme de hachage MD5 n'est
plus considéré de nos jours comme suffisamment sécurisé avec des
attaques déterminées.
La méthode md5
ne peut pas être utilisé avec la
fonctionnalité db_user_namespace.
Pour faciliter la transition de la méthode md5
à la
méthode SCRAM, si md5
est indiqué comme méthode
d'authentification dans pg_hba.conf
mais que le
mot de passe de l'utilisateur sur le serveur est chiffré avec SCRAM
(voir ci-dessous), l'authentification SCRAM est automatiquement
utilisée à la place.
password
La méthode password
envoie le mot de passe en clair
et est de ce fait vulnérable aux attaques de type
« sniffing ». Elle doit être évitée chaque fois que
possible. Si la connexion est protégée par le chiffrage SSL, alors
password
peut être utilisé de façon sécurisée. (Ceci
étant dit, l'authentification par certificat SSL serait un meilleur
choix en cas d'utilisation de SSL).
Les mots de passe PostgreSQL sont distincts des
mots de passe du système d'exploitation. Le mot de passe de chaque
utilisateur est enregistré dans le catalogue système
pg_authid
. Ils peuvent être gérés avec les commandes
SQL CREATE ROLE et ALTER ROLE.
Ainsi, par exemple, CREATE ROLE foo WITH LOGIN PASSWORD
'secret';
ou la méta-commande \password
de
psql. Si aucun mot de passe n'est enregistré
pour un utilisateur, le mot de passe enregistré est nul et
l'authentification par mot de passe échoue systématiquement pour cet
utilisateur.
La disponibilité des différentes méthodes d'authentification basées sur
des mots de passe dépend de comment un mot de passe utilisateur est
chiffré sur le serveur (ou haché pour être plus précis). Ceci est contrôlé
par le paramètre de configuration password_encryption au moment où le mot de passe est
configuré. Si un mot de passe est chiffré en utilisant le paramètre
scram- sha-256
, alors il peut être utilisé par les
méthodes d'authentification scram-sha-256
et
password
(mais la transmission du mot de passe sera en
clair dans ce dernier cas). La méthode d'authentification
md5
sera automatiquement basculée vers la méthode
scram-sha-256
dans ce cas, comme expliqué ci-dessus,
donc cela fonctionnera aussi. Si un mot de passe était chiffré en
utilisant la configuration md5
, alors il peut seulement
être utilisé pour les méthodes d'authentification md5
et password
(de nouveau, avec le mot de passe transmis
en clair dans ce dernier cas). (Les anciennes versions de PostgreSQL
supportaient le stockage en clair du mot de passe sur le serveur. Ceci
n'est plus possible.) Pour vérifier les hachages de mot de passe
actuellement enregistrés, voir le catalogue système
pg_authid
.
Pour mettre à jour une installation existante de md5
vers scram-sha-256
, après s'être assuré que toutes les
bibliothèques courantes sont suffisamment récentes pour supporter SCRAM,
configurez password_encryption = 'scram-sha-256'
dans
postgresql.conf
, demandez à chaque utilisateur de
configurer un nouveau mot de passe, et modifiez la méthode
d'authentification dans pg_hba.conf
avec
scram-sha-256
.