他のバージョンの文書 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

19.3. 接続と認証

19.3.1. 接続設定

listen_addresses (string)

クライアントアプリケーションからの接続をサーバが監視する TCP/IP アドレスを指定します。 この値は、ホスト名をコンマで区切ったリスト、そして/もしくは、数値によるIPアドレスです。 *という特別なエントリは利用可能な全てのIPインタフェースに対応します。 エントリ0.0.0.0は全てのIPv4アドレスの監視を、そしてエントリ::は全てのIPv6アドレスの監視を許容します。 リストが空の場合、サーバはいかなるIPインタフェースも全く監視しないで、Unixドメインソケットのみを使用して接続が行われます。 デフォルトの値はlocalhostで、ローカルなTCP/IP loopback接続のみ許可します。 クライアント認証 (第20章)は誰がサーバにアクセス可能かをきめ細かく制御するのに対し、listen_addressesはどのインタフェースが接続を試みるかを制御します。 これにより、安全でないネットワークインタフェース上において繰り返して行われる悪意のある接続要求の防止に役立ちます。 このパラメータはサーバ起動時のみ設定可能です。

port (integer)

サーバが監視するTCPポートで、デフォルトは 5432です。 サーバが監視する全てのIPアドレスに対し、同じポート番号が使用されることを覚えておいてください。 このパラメータはサーバ起動時のみ設定可能です。

max_connections (integer)

データベースサーバに同時接続する最大数を決定します。 デフォルトは典型的に100接続ですが、カーネルの設定が(initdbの過程で)それをサポートしていない場合、もっと少なくなることがあります。 このパラメータはサーバ起動時のみに設定可能です。

スタンバイサーバを運用している場合、このパラメータはマスターサーバでの設定と同じ、もしくはより高い値に設定しなければなりません。そうしないと問い合わせがスタンバイサーバ内で受け入れられません。

superuser_reserved_connections (integer)

PostgreSQLのスーパーユーザによる接続のために予約されている接続開口部(スロット)の数を決定します。 最大、max_connectionsの数までの接続を同時に有効にすることができます。 有効な接続数がmax_connectionsからsuperuser_reserved_connectionsを差し引いた数以上のときは、新規接続はスーパーユーザのみが許可され、新たなレプリケーション接続は受け入れられません。

デフォルトの値は3接続です。 この値は max_connectionsより小さくなくてはなりません。 このパラメータはサーバ起動時のみ設定可能です。

unix_socket_directories (string)

サーバがクライアントアプリケーションからの接続要求を監視するUnixドメインソケットのディレクトリを指定します。 複数ソケットはコンマで区切られた複数ディレクトリをリストすることで作成できます。 項目間の空白文字は無視されます。 ディレクトリ名に空白文字もしくはコンマを使用する必要がある場合、ディレクトリ名を二重引用符で括ります。 空の値はいかなるUnixドメインソケットも監視しないようにします。 この場合、TCP/IPソケットのみがサーバとの接続に使用されます。 デフォルト値は通常/tmpですが、ビルド時に変更できます。 このパラメータはサーバ起動時のみ設定可能です。

.s.PGSQL.nnnnという名前のソケットファイル(nnnnはポート番号)のほかに、.s.PGSQL.nnnn.lockという通常ファイルがそれぞれのunix_socket_directoriesディレクトリの中に作成されます。 いずれのファイルも手作業で削除してはいけません。

Windowsでは、Unixドメインソケットがありませんので、このパラメータは無関係です。

unix_socket_group (string)

Unixドメインソケット(複数も)を所有するグループを設定します(ソケットを所有するユーザは常にサーバを起動するユーザです)。 unix_socket_permissionsパラメータとの組合せで、Unixドメインソケット接続の追加的アクセス管理機構として使うことができます。 デフォルトでは空文字列で、サーバユーザのデフォルトグループを使用します。 このパラメータはサーバ起動時のみ設定可能です。

Windowsでは、Unixドメインソケットがありませんので、このパラメータは無関係です。

unix_socket_permissions (integer)

Unixドメインソケット(複数も)のアクセスパーミッションを設定します。 Unixドメインソケットは通常のUnixファイルシステムパーミッション設定の一式を使用します。 パラメータ値は、chmodおよびumaskシステムコールが受け付ける数値形式での指定を想定しています。 (通常使われる8進数形式を使用するのであれば、0(ゼロ)で始まらなければなりません。)

デフォルトのパーミッションは、誰でも接続できる0777になっています。 変更するならば0770(ユーザとグループのみです。unix_socket_groupも参照してください)や0700(ユーザのみ)が適切です。 (Unixドメインソケットでは書き込み権限だけが問題になるため、読み込みや実行のパーミッションを設定または解除する意味はありません。)

このアクセス制御機構は 第20章で記述されたものとは別個のものです。

このパラメータはサーバ起動時のみ設定可能です。

このパラメータはSolaris 10の時点でのSolarisなど、ソケットのパーミッションを完全に無視するシステムでは無関係です。 こうしたシステムでは、制限したいユーザだけが検索パーミッションを持つディレクトリをunix_socket_directoriesで指すようにすることによって同じような効果を得ることができます。 Windowsでも、Unixドメインソケットがありませんので、このパラメータは無関係です。

bonjour (boolean)

Bonjourによりサーバの存在を公表することを可能にします。デフォルトはoffです。このパラメータはサーバ起動時のみ設定可能です。

bonjour_name (string)

Bonjourサービス名を指定します。 このパラメータが空文字列''(デフォルトです)に設定されていると、コンピュータ名が使用されます。 サーバがBonjourサポート付でコンパイルでされていない場合は無視されます。 このオプションはサーバ起動時のみに設定可能です。

tcp_keepalives_idle (integer)

クライアントとのやり取りがなくなった後、オペレーティングシステムがTCPのkeepaliveパケットをクライアントに送信するまでの時間を指定します。 この値が単位なしで指定された場合は、秒単位であるとみなします。 0(デフォルトです)の場合はオペレーティングシステムのデフォルト値を使用します。 このパラメータはTCP_KEEPIDLEまたは同等のソケットオプションをサポートするシステムと、Windowsでのみサポートされます。 その他のシステムではゼロでなければなりません。 Unixドメインソケット経由で接続されたセッションでは、このパラメータは無視され、常にゼロとして読み取られます。

注記

Windowsでは0を指定するとこのパラメータを2時間に設定します。なぜなら、Windowsはシステムデフォルト値を読む手段を提供していないからです。

tcp_keepalives_interval (integer)

TCPのkeepaliveメッセージに対してクライアントから応答がない場合に、再送を行うまでの時間を指定します。 この値が単位なしで指定された場合は、秒単位であるとみなします。 0(デフォルトです)の場合はシステムのデフォルト値を使用します。 このパラメータはTCP_KEEPINTVLまたは同等のソケットオプションをサポートするシステムと、Windowsでのみサポートされます。 その他のシステムではゼロでなければなりません。 Unixドメインソケット経由で接続されたセッションでは、このパラメータは無視され、常にゼロとして読み取られます。

注記

Windowsでは0を指定すると、このパラメータを1秒に設定します。なぜなら、Windowsはシステムデフォルト値を読む手段を提供していないからです。

tcp_keepalives_count (integer)

サーバのクライアントへの接続が切れたと判断されるまでのTCP keepaliveメッセージの数を指定します。 0(デフォルトです)の場合はオペレーティングシステムのデフォルト値を使用します。 このパラメータはTCP_KEEPCNTまたは同等のソケットオプションをサポートするシステムでのみサポートされます。 その他のシステムではゼロでなければなりません。 Unixドメインソケット経由で接続されたセッションでは、このパラメータは無視され、常にゼロとして読み取られます。

注記

このパラメータはWindowsではサポートされておらず、ゼロでなければなりません。

tcp_user_timeout (integer)

未確認のデータが残ったままの接続が強制的に閉じられるまでの時間を指定します。 この値が単位なしで指定された場合は、ミリ秒単位であるとみなします。 0(デフォルトです)の場合はオペレーティングシステムのデフォルト値を使用します。 このパラメータは、TCP_USER_TIMEOUTをサポートするシステムでのみ使用できます。他のシステムでは、0にする必要があります。 UNIXドメインソケットで接続しているセッションではこのパラメータは無視され、常に0として扱われます。

注記

このパラメータはWindowsではサポートされておらず、ゼロでなければなりません。

19.3.2. 認証

authentication_timeout (integer)

クライアント認証を完了するまでの最大時間です。 もし、この時間内に自称クライアントが認証プロトコルを完了しない場合、サーバは接続を閉じます。 これはハングしたクライアントが接続を永久に占有することを防ぎます。 この値が単位なしで指定された場合は、秒単位であるとみなします。 デフォルトは1分(1m)です。 このパラメータはpostgresql.confファイル、またはサーバのコマンドラインでのみ設定可能です。

password_encryption (enum)

CREATE ROLEあるいはALTER ROLEでパスワードを設定する際に、このパラメータはパスワードを暗号化するアルゴリズムを指定します。 デフォルト値はmd5で、パスワードをMD5ハッシュとして格納します(onmd5の別名として受付けます)。 このパラメータをscram-sha-256とすると、SCRAM-SHA-256でパスワードを暗号化します。

古いクライアントはSCRAM認証機構をサポートしていない可能性があり、したがってSCRAM-SHA-256による暗号化は動作しないかもしれないことに注意してください。 さらなる詳細については20.5をご覧ください。

krb_server_keyfile (string)

Kerberosサーバーキーファイルの場所を設定します。 詳細は20.6をご覧ください。 このパラメータはpostgresql.confファイル、またはサーバのコマンドラインでのみ設定可能です。

krb_caseins_users (boolean)

GSSAPIユーザ名を大文字小文字の区別なく取り扱うかどうかを設定します。 デフォルトはoff(大文字小文字を区別する)です。 このパラメータはpostgresql.confファイル、またはサーバのコマンドラインでのみ設定可能です。

db_user_namespace (boolean)

このパラメータはデータベース毎のユーザ名を可能にします。 デフォルトはオフです。 このパラメータはpostgresql.confファイル、またはサーバのコマンドラインでのみ設定可能です。

これがオンの場合、username@dbnameの様にしてユーザを作成しなければなりません。 usernameが接続中のクライアントより渡された時、 @およびデータベース名がユーザ名に付加され、そのデータベース特有のユーザ名をサーバが見に行きます。 SQL環境下で@を含む名前のユーザを作成する場合、そのユーザ名は引用符で括られなければならないことに注意してください。

このパラメータを有効にしていても通常の広域ユーザを作成することができます。 クライアントにユーザ名を指定する時に、たとえばjoe@のように単に@を付け加えてください。 @はサーバがユーザ名を検索する以前に取り去られます。

db_user_namespaceはクライアントとサーバのユーザ名の表示を区別することができます。 認証検査は常にサーバのユーザ名で行われるので、認証方式はクライアントのではなくサーバのユーザ名で構成されなければなりません。 md5では、クライアントおよびサーバの両方でユーザ名をソルトとして使用するので、md5db_user_namespaceと一緒に使用することはできません。

注記

この機能は完全な解決方法が見つかるまでの一時的なものです。 完全な解決方法が見つかったら、このオプションは削除される予定です。

19.3.3. SSL

SSLの設定に関するさらなる情報については18.9をご覧ください。

ssl (boolean)

SSLによる接続を有効にします。 このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。 デフォルトはoffです。

ssl_ca_file (string)

SSLサーバ認証局(CA)が入っているファイル名を設定します。 相対パスの場合は、データディレクトリからの相対パスになります。 このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。 デフォルトは空で、この場合CAファイルは読み込まれず、クライアントのサーバ検証は行われません。

ssl_cert_file (string)

SSLサーバ証明書が入っているファイル名を設定します。 相対パスの場合は、データディレクトリからの相対パスになります。 このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。 デフォルトは server.crt です。

ssl_crl_file (string)

SSLサーバ証明書失効リスト(CRL)が入っているファイル名を設定します。 相対パスの場合は、データディレクトリからの相対パスになります。 このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。 デフォルトは空で、この場合CRLファイルは読み込まれません。

ssl_key_file (string)

SSLサーバの秘密鍵が入っているファイル名を設定します。 相対パスの場合は、データディレクトリからの相対パスになります。 このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。 デフォルトは server.key です。

ssl_ciphers (string)

SSL接続で使うことのできるSSL暗号スイートのリストを指定します。 設定構文と使用可能な値のリストについてはOpenSSLパッケージの ciphersマニュアルをご覧ください。 TLSバージョン1.2あるいはそれ以下のバージョンを使用する接続のみが影響を受けます。 今の所、TLSバージョン1.3接続で使用される暗号の選択を制御する設定はありません。 デフォルト値はHIGH:MEDIUM:+3DES:!aNULLです。 特別なセキュリティ要件でなければ通常これが適当です。

このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。

デフォルト値の説明:

HIGH

HIGHグループ(たとえばAES, Camellia, 3DES)を使用する暗号スイート

MEDIUM

MEDIUMグループ(たとえば RC4, SEED)を使用する暗号スイート

+3DES

OpenSSLのHIGHに対するデフォルトの並び順には問題があります。 3DESがAES128より高いとしているからです。 3DESはAES128よりもセキュアではなく、またずっと遅いので、これは間違っています。 +3DESではそれを他のすべてのHIGHMEDIUM暗号よりも後に位置づけます。

!aNULL

認証を行わない無名暗号スイートを無効にします。 そういった暗号スイートは中間者攻撃に対して脆弱で、使用すべきではありません。

OpenSSLのバージョンにより、利用可能な暗号スイートの詳細は異なります。 openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL' コマンドを使って現在インストールされているOpenSSLのバージョンに関する詳細情報を得てください。 ここで得られるリストは、サーバキータイプにより実行時にフィルターされることに注意してください。

ssl_prefer_server_ciphers (boolean)

サーバのSSL暗号設定をクライアントに優先して使うかどうかを指定します。 このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。 デフォルトはonです。

古いバージョンのPostgreSQLにはこの設定がなく、常にクライアントの設定を使います。 この設定は、主に古いバージョンとの互換性のために設けられています。 通常サーバの設定に従うほうが良いです。大抵の場合、サーバはより適切に設定されているからです。

ssl_ecdh_curve (string)

ECDHキー交換で使われる曲線の名前を指定します。 接続するすべてのクライアントがこの設定をサポートしている必要があります。 サーバの楕円曲線キーで使用されるのと同じ曲線である必要はありません。 このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。 デフォルト値はprime256v1です。

OpenSSLはよく使われる曲線に名前を付けています。 prime256v1 (NIST P-256), secp384r1 (NIST P-384), secp521r1 (NIST P-521). 利用できる曲線の完全なリストはopenssl ecparam -list_curvesで得られます。ただし、TLSではこのすべてが利用できるわけではありません。

ssl_min_protocol_version (enum)

使用するSSL/TLSプロトコルバージョンの最小値を設定します。 今の所使用できる値はTLSv1TLSv1.1TLSv1.2TLSv1.3です。 古いバージョンのOpenSSLライブラリはすべての値をサポートしません。 サポートしていない値が設定されるとエラーが発生します。 TLS 1.0より前のプロトコルバージョン、すなわちSSLバージョン2あるいは3は常に無効となります。

デフォルトはTLSv1で、主に古いバージョンのOpenSSLライブラリをサポートするためです。 すべてのソフトウェアコンポーネントが新しいバージョンのプロトコルをサポートしているなら、より高い値にするのが良いでしょう。

ssl_max_protocol_version (enum)

使用するSSL/TLSプロトコルバージョンの最大値を設定します。 使用できる値はssl_min_protocol_versionと、すべてのプロトコルバージョンを許可する空文字です。 デフォルトはすべてのプロトコルバージョンを許可する設定です。 最大プロトコルバージョンの設定は主にテスト、あるいは新しいプロトコルを使った時にコンポーネントのどこかに問題がある時に有用です。

ssl_dh_params_file (string)

いわゆる短命DH系SSL暗号で使用するディフィー・ヘルマンパラメータを格納するファイル名を指定します。 デフォルトは空で、この場合はコンパイル時に決められたデフォルトのDHパラメータが使用されます。 攻撃者が、よく知られたコンパイル時設定のDHパラメータを解読しようとしている場合には、カスタムDHパラメータを使うことでその危険性を低減できます。 openssl dhparam -out dhparams.pem 2048を使って、独自のDHパラメータファイルを作ることができます。

このパラメータは、postgresql.confファイルか、サーバのコマンドラインでのみ設定可能です。

ssl_passphrase_command (string)

秘密鍵などのSSLファイルを復号する際に、パスフレーズの入手が必要な時に起動される外部コマンドを設定します。 デフォルトではこのパラメータは空文字で、組み込みのプロンプト機構が使用されます。

このコマンドは、パスフレーズを標準出力に書き出し、コード0で終了しなければなりません。 パラメータの値の%pはプロンプト文字列に置き換えられます。 (%を使いたい場合は%%としてください。) プロンプト文字列はおそらく空白文字を含むので、適切に引用符付けするように注意してください。 出力の最後に一個の改行があれば、削除されます。

このコマンドは実際にはパスフレーズ用にユーザにプロンプトを表示する必要はありません。 ファイルからパスフレーズが読めるなら、キーチェーン機構やその他から取得します。 選択された仕組みが適切にセキュアかどうかを確認するのはユーザ次第です。

このパラメータはpostgresql.confファイル内、またはサーバのコマンドラインのみで設定可能です。

ssl_passphrase_command_supports_reload (boolean)

このパラメータは、キーにパスフレーズが必要な場合、設定ファイルの再読み込み中にssl_passphrase_commandで設定されたパスフレーズコマンドも呼び出されるかどうかを設定します。 このパラメータがoff(デフォルト)なら、ssl_passphrase_commandは再読込の際に無視され、パスフレーズが必要な場合、SSL設定は再読込されません。 この設定は、サーバ実行中は存在しないかもしれないTTYがプロンプトに必要なコマンドに適しています。 たとえばパスフレーズがファイルから読み込める場合には、この設定をonにするのが適切です。

このパラメータはpostgresql.confファイル内、またはサーバのコマンドラインのみで設定可能です。