他のバージョンの文書 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ではサポートされておらず、ゼロでなければなりません。

19.3.2. セキュリティと認証

authentication_timeout (integer)

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

ssl (boolean)

SSLによる接続を有効にします。これを使用する前に18.9. SSLによる安全なTCP/IP接続をお読みください。デフォルトはoffです。このパラメータはサーバ起動時のみ設定可能です。SSL通信はTCP/IP接続の場合のみ有効です。

ssl_ca_file (string)

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

ssl_cert_file (string)

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

ssl_crl_file (string)

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

ssl_key_file (string)

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

ssl_ciphers (string)

セキュアな接続で使用できるSSL暗号スィートのリストを指定します。 設定構文と使用可能な値のリストについてはOpenSSLパッケージの ciphersマニュアルをご覧ください。 デフォルト値はHIGH:MEDIUM:+3DES:!aNULLです。 特別なセキュリティ要件でなければ通常これが適当です。 このパラメータはサーバ起動時のみ設定可能です。

デフォルト値の説明:

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 (bool)

サーバのSSL暗号設定をクライアントに優先して使うかどうかを指定します。 デフォルトは真です。 このパラメータはサーバ起動時のみ設定可能です。

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

ssl_ecdh_curve (string)

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

OpenSSLはよく使われる曲線に名前を付けています。 prime256v1 (NIST P-256), secp384r1 (NIST P-384), secp521r1 (NIST P-521).

利用できる曲線の完全なリストはopenssl ecparam -list_curvesで得られます。ただし、TLSではこのすべてが利用できるわけではありません。

password_encryption (boolean)

ENCRYPTEDもしくはUNENCRYPTEDの指定なしで、CREATE USER もしくはALTER USERにてパスワードが指定されている場合、このパラメータはパスワードを暗号化するか否かを決定します。 デフォルトはon(パスワードを暗号化)です。

krb_server_keyfile (string)

Kerberosサーバの鍵ファイルの場所を設定します。詳細は20.3.3. GSSAPI認証を参照してください。 このパラメータは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と一緒に使用することはできません。

注記

この機能は完全な解決策が見つかるまでの暫定的な手段です。見つかった時点でこのオプションは削除されます。