Création d'un utilisateur avec un mot de passe crypté dans PostgreSQL

est-il possible de créer un utilisateur dans PostgreSQL sans fournir le mot de passe en clair (idéalement, je voudrais pouvoir créer un utilisateur en fournissant seulement son mot de passe crypté avec sha-256) ?

Ce que je voudrais faire est de créer un utilisateur avec quelque chose comme ça :

CREATE USER "martin" WITH PASSWORD '$kH3l2bj8iT$KKrTAKDF4OoE7w.oy(...)BPwcTBN/V42hqE.';

Est-il possible de faire cela ?

Merci pour votre aide.

38
demandé sur Martin 2013-07-02 19:02:22

3 réponses

Vous pouvez fournir le mot de passe déjà hachée avec md5, comme dit dans la doc (CREATE ROLE):

crypté non crypté ces mots clés contrôlent si le mot de passe est enregistré crypté dans les catalogues système. (Si aucune n'est spécifiée, la le comportement par défaut est déterminée par le paramètre de configuration password_encryption.) si la chaîne de mots de passe présentée est déjà MD5-format crypté, puis il est stocké crypté que-est, indépendamment de QU'elle soit chiffrée ou non (puisque le système ne peut pas déchiffrer la chaîne de mots de passe chiffrés spécifiée). Cela permet rechargement des mots de passe cryptés pendant le dump / restore.

l'information qui manque ici est que la chaîne de caractères codée par MD5 devrait être le mot de passe concaténé avec le nom d'utilisateur, plus md5 au début.

donc par exemple créer u0 avec le mot de passe foobar sachant que md5('foobaru0')ac4bbe016b808c3c0b816981f240dcae:

CREATE USER u0 PASSWORD 'md5ac4bbe016b808c3c0b816981f240dcae';

et alors u0 pourra se connecter en tapant foobar le mot de passe.

je ne pense pas qu'il y a actuellement un moyen d'utiliser SHA-256 au lieu de md5 pour les mots de passe PostgreSQL.

52
répondu Daniel Vérité 2013-07-02 17:03:34

Je ne suis pas au courant d'un moyen de passer outre le cryptage md5 par défaut des mots de passe, mais si vous avez un rôle (alias "utilisateur") qui a déjà un mot de passe codé md5, il semble que vous pouvez fournir cela. Vérifiez cela en utilisant pg_dumpall-g (pour voir les globals de la grappe) Par exemple.

psql postgres
create role foo with encrypted password foobar;
\q

-- View the role from pg_dumpall -g
pg_dumpall -g | grep foo
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';

Or get it from:
select * from pg_catalog.pg_shadow;

-- create the role again with the already-encrypted password
psql postgres
drop role foo;
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';
\q

-- view the ROLE with the same password
pg_dumpall -g | grep foo
CREATE ROLE foo;
ALTER ROLE foo WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB NOLOGIN NOREPLICATION PASSWORD 'md5c98cbfeb6a347a47eb8e96cfb4c4b890';

documentation CREATE ROLE

8
répondu bma 2014-01-05 20:24:16

la façon la plus facile de le faire est:

CREATE USER u0 PASSWORD 'foobar';

select * from pg_catalog.pg_shadow;

mot de passe: md5ac4bbe016b808c3c0b816981f240dcae

1
répondu Kamil D 2018-05-22 20:04:24