Configuration complémentaire de Postgres
Activation et utilisation de l'authentification SASL (SCRAM-SHA256)
Sur les versions récentes de postgres le mot de passe est déjà stocké hashé en SCRAM-SHA256. Si vous avez un doute vous pouvez le vérifier sur un mot de passe existant en regardant les premiers caractères du hash ou directement dans la configuration de votre instance postgres.
La méthode scram-sha-256 est plus robuste face aux méthodes de récupération moderne comme l'utilisation de rainbow table, .... C'est pourquoi il est préconisé de l'utiliser à la place du hashage MD5.
Pour définir votre algorithme de hashage, il faut éditer le fichier postgresql.conf
:
#password_encryption = md5 # md5 or scram-sha-256
# A remplacer par
password_encryption = scram-sha-256 # md5 or scram-sha-256
Il faut ensuite éditer le fichier pg_hba.conf
:
host all all 127.0.0.1/32 md5
host all all ::1/128 md5
#A changer en
host all all 127.0.0.1/32 scram-sha-256
host all all ::1/128 scram-sha-256
Il faut éditer la configuration de votre application pour utiliser cet algorithme lors des mises à jour de mots de passe, dans app/vas/src/Module/Vitis/conf/properties.json
pour changer la clé db_password_hash
:
{
"db_password_hash": "SCRAM-SHA256"
}
Note
L'installeur sur les versions 2023.01 et plus récentes va modifier la configuration de db_password_hash en fonction de ce qui est défini sur votre serveur Postgres.
Avertissement
Le passage d'une configuration MD5 vers SCRAM-SHA256 sur une base de données existante, implique qu'il faudra remettre à jour le mot de passe de tous les utilisateurs de l'application. L'administrateur devra générer pour chacun un mot de passe temporaire manuellement et l'envoyer à l'utilisateur.
Il devra également mettre à jour les utilisateurs d'administration comme u_vitis et adapter la configuration. Le changement sur une base en production sera donc extrémement lourd pour les administrateurs.
Pour lister les utilisateurs dont le mot de passe n'a pas été mis à jour de md5 vers scram-sha-256 vous pouvez utiliser la requête suivante :
SELECT rolname, rolpassword FROM pg_catalog.pg_authid WHERE rolcanlogin IS TRUE AND rolpassword LIKE 'md5%'