複数のパスワードに基づく認証方式があります。 これらは似たような方法で使用されますが、ユーザのパスワードをサーバに格納する方法と、クライアントによって提供されたパスワードが接続を通じて送信される方法が異なります。
scram-sha-256
scram-sha-256方式は、RFC 7677に記述された方法でSCRAM-SHA-256認証を実行します。
これはチャレンジ/レスポンス方式のひとつであり、信頼できない接続におけるパスワードの漏洩を防ぎ、安全だと見なされる暗号学的ハッシュ形式でパスワードをサーバに格納するのを支援します。
これは、現在実装されている認証方式の中では最も安全ですが、古いクライアントライブラリではサポートされていません。
md5
md5方式は、独自のより安全性の低いチャレンジ/レスポンス機構を使います。
パスワードの漏洩を防ぎ、平文でパスワードをサーバに格納するのを避けることができますが、攻撃者がサーバからパスワードハッシュを盗むことを防ぐのを防ぐことはできません。
また、MD5ハッシュアルゴリズムは、昨今では強い意志をもった攻撃に対しては安全ではないと考えられています。
md5は、db_user_namespace機能と一緒に使用することはできません。
md5方式からより新しいSCRAM方式への移行を容易にするため、pg_hba.confでmd5が指定されているにもかかわらず、パスワードがSCRAM(下記参照)で暗号化されている場合には、自動的にSCRAMに基づく認証が代わりに使用されます。
password
password方式は、パスワードを平文で送信するので、パスワード「盗聴」攻撃に対して脆弱です。
可能ならば、常に避けるようにしてください。
しかしながら、接続がSSL暗号で保護されていれば、passwordは安全に使用できます。
(もっとも、SSLの利用に依存するのであれば、SSL証明書認証がより良い選択かもしれません。)
PostgreSQLデータベースパスワードはオペレーティングシステムのユーザパスワードとも別のものです。
各データベースユーザのパスワードはpg_authidシステムカタログテーブルの中に格納されます。
CREATE ROLE foo WITH LOGIN PASSWORD 'secret'のように、パスワードはSQLコマンドCREATE ROLEとALTER ROLEを使って管理できます。
あるいは、psqlの\passwordコマンドでも管理できます。
もしユーザに対してパスワードが設定されない場合、格納されるパスワードはNULLとなり、そのユーザのパスワード認証は常に失敗します。
パスワードにもとづく異なる認証方式が利用可能かどうかは、サーバ上でユーザのパスワードがどのように暗号化(正確には、ハッシュ化)されるのかに依存します。
これは、パスワードが設定されたときに、設定パラメータのpassword_encryptionによって制御されます。
パスワードがscram-sha-256によって暗号化されていれば、認証方式のscram-sha-256とpasswordで利用できます。
(ただし、後者の場合にはパスワードの転送は平文になります。)
前述のように、ここで認証方式のmd5を指定すると、scram-sha-256方式に自動的に切り替わります。
パスワードがmd5で暗号化されていると、md5とpasswordでのみ使用されます。
(ここでも、後者の場合にはパスワードは平文で転送されます。)
(以前のPostgreSQLのリリースでは、パスワードを平文で格納することをサポートしていました。
これはもはや不可能です。)
現在格納されているパスワードのハッシュを確認するには、システムカタログpg_authidを参照してください。
既存のインストールにおいて、md5からscram-sha-256にアップグレードするには、すべてのクライアントライブラリが十分新しく、SCRAMをサポートをできることを確認してから、postgresql.confでpassword_encryption = 'scram-sha-256'を設定し、すべてのユーザに新しいパスワードを設定してもらい、pg_hba.confの認証方式をscram-sha-256に変更してください。