Создание пользователя с зашифрованным паролем в PostgreSQL

можно ли создать пользователя в PostgreSQL без предоставления обычного текстового пароля (в идеале, я хотел бы иметь возможность создать пользователя, предоставляющего только свой пароль, зашифрованный sha-256) ?

что я хотел бы сделать, это создать пользователя с чем-то вроде этого :

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

есть ли способ сделать это ?

Спасибо за помощь.

3 ответов


вы можете предоставить свой пароль хэшируется с md5, как сказано в doc (СОЗДАТЬ РОЛЬ):

зашифрованные незашифрованные эти ключевые слова контролируют, является ли пароль хранится в зашифрованном виде в системных каталогах. (Если ни то, ни другое не указано, поведение по умолчанию определяется параметром конфигурации шифрование пароля.) Если представленная строка пароля уже находится в MD5-зашифрованный формат, затем он хранится в зашифрованном виде как-есть!--17-->, независимо от указан ли зашифрованный или незашифрованный (поскольку система не может расшифровать указанную зашифрованную строку пароля). Это позволяет перезагрузка зашифрованных паролей во время дампа/восстановления.

информация, которая отсутствует здесь, заключается в том, что зашифрованная MD5 строка должна быть паролем, объединенным с именем пользователя, плюс md5 в начале.

так, например, для создания u0 с паролем foobar, зная, это md5('foobaru0') is ac4bbe016b808c3c0b816981f240dcae:

CREATE USER u0 PASSWORD 'md5ac4bbe016b808c3c0b816981f240dcae';

и тогда u0 сможет войти в систему, набрав foobar в качестве пароля.

Я не думаю, что в настоящее время есть способ использовать SHA-256 вместо md5 для паролей PostgreSQL.


Я не знаю, как переопределить шифрование паролей md5 по умолчанию, но если у вас есть роль (она же "пользователь"), которая имеет уже зашифрованный пароль md5, похоже, что вы можете это предоставить. Проверьте это с помощью pg_dumpall-g (чтобы увидеть глобалы из кластера) Например.

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';

документы на СОЗДАТЬ РОЛЬ


гораздо проще способ к этому является:

CREATE USER u0 PASSWORD 'foobar';

select * from pg_catalog.pg_shadow;

дает passwd:md5ac4bbe016b808c3c0b816981f240dcae