プレーンテキストのパスワードを提供せずにPostgreSQLでユーザーを作成することは可能ですか?
私がやりたいのは、そのようなものでユーザーを作成することです:
CREATE USER "martin" WITH PASSWORD '$6$kH3l2bj8iT$KKrTAKDF4OoE7w.oy(...)BPwcTBN/V42hqE.';
それを行う方法はありますか?
ご協力ありがとうございました。
ドキュメントで説明されているように、_md5
_で既にハッシュされたパスワードを提供できます( CREATE ROLE ):
ENCRYPTED UNENCRYPTEDこれらのキーワードは、パスワードを暗号化してシステムカタログに保存するかどうかを制御します。 (どちらも指定されていない場合、デフォルトの動作は構成パラメーターpassword_encryptionによって決定されます。)提示されたパスワード文字列がすでにMD5暗号化形式である場合、そのまま暗号化されて保存されます、ENCRYPTEDまたはUNENCRYPTEDが指定されているかどうかに関係なく(システムは指定された暗号化パスワード文字列を復号化できないため)。これにより、ダンプ/復元中に暗号化されたパスワードを再ロードできます。
ここで欠落している情報は、MD5で暗号化された文字列は、ユーザー名と先頭に_md5
_を連結したパスワードにする必要があるということです。
たとえば、md5('foobaru0')
が_u0
_であることを知って、パスワードfoobar
で_ac4bbe016b808c3c0b816981f240dcae
_を作成するには:
_CREATE USER u0 PASSWORD 'md5ac4bbe016b808c3c0b816981f240dcae';
_
そして、u0はfoobar
をパスワードとして入力することでログインできます。
現在、PostgreSQLパスワードに_SHA-256
_の代わりに_md5
_を使用する方法があるとは思わない。
パスワードのデフォルトのmd5暗号化をオーバーライドする方法は知りませんが、すでにmd5暗号化されたパスワードを持つROLE(別名「USER」)がある場合、それを提供できるようです。 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 のドキュメント
これへのはるかに簡単な方法は次のとおりです。
CREATE USER u0 PASSWORD 'foobar';
select * from pg_catalog.pg_shadow;
パスワードを与える:md5ac4bbe016b808c3c0b816981f240dcae