複数のパスワードに基づく認証方式があります。 これらは似たような方法で使用されますが、ユーザのパスワードをサーバに格納する方法と、クライアントによって提供されたパスワードが接続を通じて送信される方法が異なります。
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
に変更してください。