PostgreSQL で、平文のパスワードを入力せずにユーザを作成することは可能ですか (理想的には、sha-256 で暗号化したパスワードのみを入力するユーザを作成したいです)。
私がやりたいのは、このようなものでユーザーを作ることです。
CREATE USER "martin" WITH PASSWORD '$6$kH3l2bj8iT$KKrTAKDF4OoE7w.oy(...)BPwcTBN/V42hqE.';
何か方法があるのでしょうか?
よろしくお願いします。
doc (CREATE ROLE) にあるように、md5
でハッシュ化したパスワードを提供することもできます。
ENCRYPTED UNENCRYPTED これらのキーワードは、パスワードの保存の有無を制御します。 システムカタログに暗号化して保存されます。(どちらも指定しない場合は デフォルトの動作は、設定パラメータ パスワードの暗号化(password_encryption)。**提示されたパスワード文字列がすでに MD5で暗号化された形式で保存される場合は、以下の条件に関わらず、そのまま暗号化されて保存されます。 ENCRYPTEDとUNENCRYPTEDのどちらを指定しても(システム上では 指定された暗号化されたパスワード文字列を復号化します)。これによって ダンプ/リストア時に暗号化されたパスワードの再読み込みを行います。
ここで足りない情報は、MD5で暗号化された文字列は、パスワードとユーザー名を連結し、先頭にmd5
を付けたものでなければならないということです。
例えば、u0
をパスワード foobar
で作成する場合、 md5('foobaru0')
は ac4bbe016b808c3c0b816981f240dcae
であると知っているわけです。
CREATE USER u0 PASSWORD 'md5ac4bbe016b808c3c0b816981f240dcae';
と入力すると、u0はパスワードとしてfoobar
を入力してログインできるようになります。
PostgreSQL のパスワードに md5
の代わりに SHA-256
を使用する方法は、今のところないと思われます。
パスワードのデフォルトの 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]1のDocs。