PostgreSQLLa base de données la plus sophistiquée au monde.
Documentation PostgreSQL 12.18 » Administration du serveur » Authentification du client » Authentification par mot de passe

20.5. Authentification par mot de passe

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.