Создание пользователя с зашифрованным паролем в 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