Можно ли создать пользователя в PostgreSQL без предоставления пароля в виде обычного текста (в идеале, я хотел бы иметь возможность создать пользователя, предоставив только его пароль, зашифрованный с помощью sha-256)?
Я хотел бы создать пользователя с чем-то вроде этого:
CREATE USER "martin" WITH PASSWORD '$6$kH3l2bj8iT$KKrTAKDF4OoE7w.oy(...)BPwcTBN/V42hqE.';
Есть ли какой-нибудь способ сделать это?
Спасибо за помощь.
Вы можете предоставить пароль, уже хэшированный с помощью md5
, как сказано в документе (CREATE ROLE):
ENCRYPTED UNENCRYPTED Эти ключевые слова определяют, будет ли пароль храниться в зашифрованном виде в системных каталогах. (Если не указано ни одно из них, то поведение по умолчанию определяется параметром конфигурации password_encryption.) Если представленная строка пароля уже находится в > MD5-шифровании. MD5-шифрованном формате, то она хранится зашифрованной как есть, независимо от того. указано ли ENCRYPTED или UNENCRYPTED (так как система не может > расшифровать указанный пароль). расшифровать указанную зашифрованную строку пароля). Это позволяет перезагрузку зашифрованных паролей во время дампа/восстановления.
Здесь не хватает информации о том, что MD5-шифрованная строка должна представлять собой пароль, скомбинированный с именем пользователя, плюс md5
в начале.
Например, чтобы создать u0
с паролем foobar
, нужно знать, что md5('foobaru0')
- это ac4bbe016b808c3c0b816981f240dcae
:
CREATE USER u0 PASSWORD 'md5ac4bbe016b808c3c0b816981f240dcae';
и тогда u0 сможет войти в систему, введя в качестве пароля foobar
.
Я не думаю, что в настоящее время существует способ использовать SHA-256
вместо md5
для паролей PostgreSQL.
Я не знаю способа отменить md5-шифрование паролей по умолчанию, но если у вас есть РОЛЬ (она же "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';
Документация для CREATE ROLE