Подтвердить что ты не робот

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

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

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

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

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

Благодарим вас за помощь.

4b9b3361

Ответ 1

Вы можете указать пароль уже hashed с md5, как сказано в документе (CREATE ROLE):

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

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

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

CREATE USER u0 PASSWORD 'md5ac4bbe016b808c3c0b816981f240dcae';

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

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

Ответ 2

Я не знаю, как переопределить шифрование паролей по умолчанию md5, но если у вас есть ROLE (иначе USER), который имеет уже зашифрованный пароль 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';

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