Создание пользователя с зашифрованным паролем в PostgreSQL
Возможно ли создать пользователя в PostgreSQL без предоставления пароля обычного текста (в идеале, я хотел бы иметь возможность создать пользователя, предоставляющего только свой пароль, зашифрованный с помощью ша-256)?
Что я хотел бы сделать, так это создать пользователя с чем-то вроде этого:
CREATE USER "martin" WITH PASSWORD '$6$kH3l2bj8iT$KKrTAKDF4OoE7w.oy(...)BPwcTBN/V42hqE.';
Есть ли способ сделать это?
Благодарим вас за помощь.
Ответы
Ответ 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';
Документы для СОЗДАТЬ РОЛЬ