★PostgreSQLカンファレンス2024 12月6日開催/チケット販売中★
他のバージョンの文書 16 | 15 | 14 | 13 | 12 | 11 | 10 | 9.6 | 9.5 | 9.4 | 9.3 | 9.2 | 9.1 | 9.0 | 8.4 | 8.3 | 8.2 | 8.1 | 8.0 | 7.4 | 7.3 | 7.2

21.5. パスワード認証

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

scram-sha-256

scram-sha-256方式は、RFC 7677に記述された方法でSCRAM-SHA-256認証を実行します。 これはチャレンジ/レスポンス方式のひとつであり、信頼できない接続におけるパスワードの漏洩を防ぎ、安全だと見なされる暗号学的ハッシュ形式でパスワードをサーバに格納するのを支援します。

これは、現在実装されている認証方式の中では最も安全ですが、古いクライアントライブラリではサポートされていません。

md5

md5方式は、独自のより安全性の低いチャレンジ/レスポンス機構を使います。 パスワードの漏洩を防ぎ、平文でパスワードをサーバに格納するのを避けることができますが、攻撃者がサーバからパスワードハッシュを盗むことを防ぐことはできません。 また、MD5ハッシュアルゴリズムは、昨今では強い意志をもった攻撃に対して安全ではないと考えられています。

md5は、db_user_namespace機能と一緒に使用することはできません。

md5方式からより新しいSCRAM方式への移行を容易にするため、pg_hba.confmd5が指定されているにもかかわらず、パスワードがSCRAM(下記参照)で暗号化されている場合には、自動的にSCRAMに基づく認証が代わりに使用されます。

password

password方式は、パスワードを平文で送信するので、パスワード盗聴攻撃に対して脆弱です。 可能ならば、常に避けるようにしてください。 しかしながら、接続がSSL暗号で保護されていれば、passwordは安全に使用できます。 (もっとも、SSLの利用に依存するのであれば、SSL証明書認証がより良い選択かもしれません。)

PostgreSQLデータベースパスワードはオペレーティングシステムのユーザパスワードとも別のものです。 各データベースユーザのパスワードはpg_authidシステムカタログテーブルの中に格納されます。 CREATE ROLE foo WITH LOGIN PASSWORD 'secret'のように、パスワードはSQLコマンドCREATE ROLEALTER ROLEを使って管理できます。 あるいは、psql\passwordコマンドでも管理できます。 もしユーザに対してパスワードが設定されない場合、格納されるパスワードはNULLとなり、そのユーザのパスワード認証は常に失敗します。

パスワードにもとづく異なる認証方式が利用可能かどうかは、サーバ上でユーザのパスワードがどのように暗号化(正確には、ハッシュ化)されるのかに依存します。 これは、パスワードが設定されたときに、設定パラメータのpassword_encryptionによって制御されます。 パスワードがscram-sha-256によって暗号化されていれば、認証方式のscram-sha-256passwordで利用できます。 (ただし、後者の場合にはパスワードの転送が平文になります。) 前述のように、ここで認証方式のmd5を指定すると、scram-sha-256方式に自動的に切り替わります。 パスワードがmd5で暗号化されていると、md5passwordでのみ使用されます。 (ここでも、後者の場合にはパスワードが平文で転送されます。) (以前のPostgreSQLのリリースでは、パスワードを平文で格納することをサポートしていました。 これはもはや不可能です。) 現在格納されているパスワードのハッシュを確認するには、システムカタログpg_authidを参照してください。

既存のインストールにおいて、md5からscram-sha-256にアップグレードするには、すべてのクライアントライブラリが十分新しく、SCRAMをサポートをできることを確認してから、postgresql.confpassword_encryption = 'scram-sha-256'を設定し、すべてのユーザに新しいパスワードを設定してもらい、pg_hba.confの認証方式をscram-sha-256に変更してください。