listen_addresses
(string
)
#
クライアントアプリケーションからの接続をサーバが監視するTCP/IPアドレスを指定します。
この値は、ホスト名をカンマで区切ったリスト、そして/もしくは、数値によるIPアドレスです。
*
という特別なエントリは利用可能な全てのIPインタフェースに対応します。
エントリ0.0.0.0
は全てのIPv4アドレスの監視を、そしてエントリ::
は全てのIPv6アドレスの監視を許容します。
リストが空の場合、サーバはいかなるIPインタフェースも全く監視しないで、Unixドメインソケットのみを使用して接続が行われます。
リストが空でない場合、少なくとも1つのTCP/IPアドレスがリスニングできる場合にサーバは起動します。
開くことのできなかったすべてのTCP/IPアドレスに対して警告が発せられます。
デフォルトの値はlocalhostで、ローカルなTCP/IP 「loopback」接続のみ許可します。
クライアント認証(第21章)は、誰がサーバにアクセスできるかを細かく制御できますが、listen_addresses
は接続要求を受け付けるインタフェースを制御します。
これは、セキュアでないネットワークインタフェース上での悪意のある接続試行の繰り返しを防ぐのに役立ちます。
このパラメータはサーバ起動時にのみ設定できます。
port
(integer
)
#サーバが監視するTCPポートで、デフォルトは 5432です。 サーバが監視する全てのIPアドレスに対し、同じポート番号が使用されることを覚えておいてください。 このパラメータはサーバ起動時のみ設定可能です。
max_connections
(integer
)
#データベースサーバに同時接続する最大数を決定します。 デフォルトは典型的に100接続ですが、カーネルの設定が(initdbの過程で)それをサポートしていない場合、もっと少なくなることがあります。 このパラメータはサーバ起動時のみに設定可能です。
スタンバイサーバを運用している場合、このパラメータはプライマリサーバでの設定と同じ、もしくはより高い値に設定しなければなりません。そうしないと問い合わせがスタンバイサーバ内で受け入れられません。
reserved_connections
(integer
)
#
pg_use_reserved_connections
権限を持つロールによる接続のために予約される接続「スロット」の数を決定します。
空き接続スロットの数がsuperuser_reserved_connectionsより大きく、かつsuperuser_reserved_connections
とreserved_connections
の合計以下の場合は常に、新しい接続はスーパーユーザあるいはpg_use_reserved_connections
権限を持つロールに対してのみ受け入れられます。
superuser_reserved_connections
以下の接続スロットが利用可能な場合、新しい接続はスーパーユーザに対してのみ受け入れられます。
デフォルトの値は0接続です。
この値は max_connections
- superuser_reserved_connections
より小さくなくてはなりません。
このパラメータはサーバ起動時のみ設定可能です。
superuser_reserved_connections
(integer
)
#
PostgreSQLのスーパーユーザによる接続のために予約されている接続「スロット」の数を決定します。
最大、max_connectionsの数までの接続を同時に有効にすることができます。
有効な同時接続数がmax_connections
からsuperuser_reserved_connections
を差し引いた数以上のときは、新規接続はスーパーユーザのみが許可されます。
このパラメータによる接続スロット予約は、reserved_connectionsによるスロット予約が使い果たされた後の緊急使用のための最終的な予備を意図しています。
デフォルトの値は3接続です。
この値は max_connections
からreserved_connections
を引いたものより小さくなくてはなりません。
このパラメータはサーバ起動時のみ設定可能です。
unix_socket_directories
(string
)
#クライアントアプリケーションからの接続をlistenするサーバ上のUnixドメインソケットのディレクトリを指定します。 複数のディレクトリをカンマで区切って指定することにより、複数のソケットを作ることができます。 項目の間の空白は無視されます。 名前の中に空白かカンマが必要なら、ディレクトリ名を二重引用符で囲ってください。 空の値はUnixドメインソケットをlistenしないことを意味します。 この場合、TCP/IPソケットを使ってサーバに接続することだけが可能になります。
@
で始まる値は、抽象名前空間にUnixドメインソケットを作ることを指定します(今の所これはLinuxでのみサポートされています)。
この場合、この値は「ディレクトリ」ではなくファイルシステムの名前空間と同様の方法で、実際のソケット名の接頭辞が求められます。
ファイルシステムの位置ではないため、抽象ソケット名接頭辞は自由に選択できますが、それにもかかわらず@/tmp
のようなファイルシステム的な値を使うのが慣例です。
デフォルト値は通常/tmp
ですが、ビルド時に変更できます。
Windowsではデフォルトは空文字で、これはつまりUnixドメインソケットがデフォルトでは作成されないことを意味します。
このパラメータはサーバ起動時のみ設定可能です。
.s.PGSQL.
という名前のソケットファイル(nnnn
nnnn
はポート番号)のほかに、.s.PGSQL.
という通常ファイルがそれぞれのnnnn
.lockunix_socket_directories
ディレクトリの中に作成されます。
いずれのファイルも手作業で削除してはいけません。
抽象名前空間にあるソケットにはロックファイルは作成されません。
unix_socket_group
(string
)
#
Unixドメインソケット(複数も)を所有するグループを設定します(ソケットを所有するユーザは常にサーバを起動するユーザです)。
unix_socket_permissions
パラメータとの組合せで、Unixドメインソケット接続の追加的アクセス管理機構として使うことができます。
デフォルトでは空文字列で、サーバユーザのデフォルトグループを使用します。
このパラメータはサーバ起動時のみ設定可能です。
このパラメータはWindowsではサポートされていません。 すべての設定は無視されます。 また、抽象名前空間にあるソケットはファイル所有者を持たないので、この場合も設定は無視されます。
unix_socket_permissions
(integer
)
#
Unixドメインソケット(複数も)のアクセスパーミッションを設定します。
Unixドメインソケットは通常のUnixファイルシステムパーミッション設定の一式を使用します。
パラメータ値は、chmod
およびumask
システムコールが受け付ける数値形式での指定を想定しています。
(通常使われる8進数形式を使用するのであれば、0
(ゼロ)で始まらなければなりません。)
デフォルトのパーミッションは、誰でも接続できる0777
になっています。
変更するならば0770
(ユーザとグループのみです。unix_socket_group
も参照してください)や0700
(ユーザのみ)が適切です。
(Unixドメインソケットでは書き込み権限だけが問題になるため、読み込みや実行のパーミッションを設定または解除する意味はありません。)
このアクセス制御機構は 第21章で記述されたものとは別個のものです。
このパラメータはサーバ起動時のみ設定可能です。
このパラメータはSolaris 10の時点でのSolarisなど、ソケットのパーミッションを完全に無視するシステムでは無関係です。
こうしたシステムでは、許可したいユーザだけが検索パーミッションを持つディレクトリをunix_socket_directories
で指すようにすることによって同じような効果を得ることができます。
抽象名前空間にあるソケットはパーミッションを持たないので、この設定も無視されます。
bonjour
(boolean
)
#Bonjourによりサーバの存在を公表することを可能にします。デフォルトはoffです。 このパラメータはサーバ起動時のみ設定可能です。
bonjour_name
(string
)
#
Bonjourサービス名を指定します。
このパラメータが空文字列''
(デフォルトです)に設定されていると、コンピュータ名が使用されます。
サーバがBonjourサポート付でコンパイルでされていない場合は無視されます。
このパラメータはサーバ起動時のみ設定可能です。
tcp_keepalives_idle
(integer
)
#
クライアントとのやり取りがなくなった後、オペレーティングシステムがTCPのkeepaliveパケットをクライアントに送信するまでの時間を指定します。
この値が単位なしで指定された場合は、秒単位であるとみなします。
0(デフォルトです)の場合はオペレーティングシステムのデフォルト値を使用します。
Windowsでは、システムのデフォルト値を読み取る方法がないため、値0を設定すると、このパラメータは2時間に設定されます。
このパラメータはTCP_KEEPIDLE
または同等のソケットオプションをサポートするシステムと、Windowsでのみサポートされます。
その他のシステムではゼロでなければなりません。
Unixドメインソケット経由で接続されたセッションでは、このパラメータは無視され、常にゼロとして読み取られます。
tcp_keepalives_interval
(integer
)
#
TCPのkeepaliveメッセージに対してクライアントから応答がない場合に、再送を行うまでの時間を指定します。
この値が単位なしで指定された場合は、秒単位であるとみなします。
0(デフォルトです)の場合はシステムのデフォルト値を使用します。
Windowsでは、システムのデフォルト値を読み取る方法がないため、値0を設定すると、このパラメータが1秒に設定されます。
このパラメータはTCP_KEEPINTVL
または同等のソケットオプションをサポートするシステムと、Windowsでのみサポートされます。
その他のシステムではゼロでなければなりません。
Unixドメインソケット経由で接続されたセッションでは、このパラメータは無視され、常にゼロとして読み取られます。
tcp_keepalives_count
(integer
)
#
サーバのクライアントへの接続が切れたと判断されるまでのTCP keepaliveメッセージの数を指定します。
0(デフォルトです)の場合はオペレーティングシステムのデフォルト値を使用します。
このパラメータはTCP_KEEPCNT
または同等のソケットオプションをサポートするシステムでのみサポートされます(Windowsは含みません)。
その他のシステムではゼロでなければなりません。
Unixドメインソケット経由で接続されたセッションでは、このパラメータは無視され、常にゼロとして読み取られます。
tcp_user_timeout
(integer
)
#
未応答の送信データが残ったままの接続が強制的に閉じられるまでの時間を指定します。
この値が単位なしで指定された場合は、ミリ秒単位であるとみなします。
0(デフォルトです)の場合はオペレーティングシステムのデフォルト値を使用します。
このパラメータは、TCP_USER_TIMEOUT
をサポートするシステム(Windowsは含みません)でのみ使用できます。他のシステムでは、0にする必要があります。
UNIXドメインソケットで接続しているセッションではこのパラメータは無視され、常に0として扱われます。
client_connection_check_interval
(integer
)
#問い合わせを実行中に、クライアントがまだ接続しているどうかの追加のチェックを行う時間間隔を指定します。 このチェックはソケットをポーリングすることによって行われ、その接続がクローズされていることをカーネルが報告することによって、長時間実行中の問い合わせをより早くアボートさせることができます。
このオプションは、Linux、macOS、illumos、BSDファミリーのオペレーティングシステムによって公開されるカーネルイベントに依存しており、現在他のシステムでは利用できません。
値が単位なしに指定されると、ミリ秒であるとみなされます。
デフォルト値は0
で、接続のチェックは無効になります。
接続チェックがない場合、サーバは接続が失われたことを、次のソケットへのアクセス、すなわちソケットの待受、データの受信、送信のときにだけ検出します。
ネットワーク障害を含めて、TCP接続が失われたことをすべてのシナリオにおいて既知のタイムフレームの中で確実にカーネルが検出するためには、オペレーティングシステムのTCP keepalive設定、あるいはPostgreSQLのtcp_keepalives_idle、tcp_keepalives_interval、tcp_keepalives_count設定を調整することが必要になるかもしれません。
authentication_timeout
(integer
)
#
クライアント認証を完了するまでの最大時間です。
もし、この時間内に自称クライアントが認証プロトコルを完了しない場合、サーバは接続を閉じます。
これはハングしたクライアントが接続を永久に占有することを防ぎます。
この値が単位なしで指定された場合は、秒単位であるとみなします。
デフォルトは1分(1m
)です。
このパラメータはpostgresql.conf
ファイル、またはサーバのコマンドラインでのみ設定可能です。
password_encryption
(enum
)
#
CREATE ROLEあるいはALTER ROLEでパスワードを設定する際に、このパラメータはパスワードを暗号化するアルゴリズムを指定します。
可能な値は、SCRAM-SHA-256でパスワードを暗号化するscram-sha-256
とパスワードをMD5ハッシュとして格納するmd5
です。
デフォルト値はscram-sha-256
です。
古いクライアントはSCRAM認証機構をサポートしていない可能性があり、したがってSCRAM-SHA-256による暗号化は動作しないかもしれないことに注意してください。 さらなる詳細については21.5をご覧ください。
scram_iterations
(integer
)
#
SCRAM-SHA-256を使用してパスワードを暗号化するときに実行される計算の反復回数です。
デフォルトは4096
です。
反復回数が多いほど、格納されたパスワードに対するブルートフォース攻撃に対する保護が強化されますが、認証の速度は低下します。
反復カウントは暗号化時に固定されるため、値を変更してもSCRAM-SHA-256で暗号化された既存のパスワードには影響しません。
変更された値を有効にするには、新しいパスワードを設定する必要があります。
krb_server_keyfile
(string
)
#
Kerberosサーバーキーファイルの場所を設定します。
デフォルトはFILE:/usr/local/pgsql/etc/krb5.keytab
です。
(ディレクトリ部分は構築時にsysconfdir
で指定されたものです。
pg_config --sysconfdir
を使って確認してください。)
このパラメータが空文字列に設定されると、それは無視されてシステム依存のデフォルトが使用されます。
このパラメータはpostgresql.conf
ファイル、またはサーバのコマンドラインでのみ設定可能です。
詳細は21.6をご覧ください。
krb_caseins_users
(boolean
)
#
GSSAPIユーザ名を大文字小文字の区別なく取り扱うかどうかを設定します。
デフォルトはoff
(大文字小文字を区別する)です。
このパラメータはpostgresql.conf
ファイル、またはサーバのコマンドラインでのみ設定可能です。
gss_accept_delegation
(boolean
)
#
クライアントからのGSSAPI委任を受け入れるかどうかを設定します。
デフォルトはoff
です。
これは、クライアントからの資格証明が受け入れられないことを意味します。
これをon
に変更すると、サーバは、クライアントから委任された資格証明を受け入れます。
このパラメータは、postgresql.conf
ファイルまたはサーバコマンドラインでのみ設定できます。
db_user_namespace
(boolean
)
#
このパラメータはデータベース毎のユーザ名を可能にします。
デフォルトはオフです。
このパラメータはpostgresql.conf
ファイル、またはサーバのコマンドラインでのみ設定可能です。
これがオンの場合、username@dbname
の様にしてユーザを作成しなければなりません。
username
が接続中のクライアントより渡された時、 @
およびデータベース名がユーザ名に付加され、そのデータベース特有のユーザ名をサーバが見に行きます。
SQL環境下で@
を含む名前のユーザを作成する場合、そのユーザ名は引用符で括られなければならないことに注意してください。
このパラメータを有効にしていても通常の広域ユーザを作成することができます。
クライアントにユーザ名を指定する時に、たとえばjoe@
のように単に@
を付け加えてください。
@
はサーバがユーザ名を検索する以前に取り去られます。
db_user_namespace
はクライアントとサーバのユーザ名の表示を区別することができます。
認証検査は常にサーバのユーザ名で行われるので、認証方式はクライアントのではなくサーバのユーザ名で構成されなければなりません。
md5
では、クライアントおよびサーバの両方でユーザ名をソルトとして使用するので、md5
をdb_user_namespace
と一緒に使用することはできません。
この機能は完全な解決方法が見つかるまでの一時的なものです。 完全な解決方法が見つかったら、このオプションは削除される予定です。
SSLの設定の詳細は、19.9を参照してください。
TLSプロトコルを使用した転送暗号化を制御するための構成パラメータは、SSLプロトコルのサポートが推奨されていないにもかかわらず、歴史的な理由からssl
と名付けられています。
SSLはこの文脈でTLSと同じ意味で使用されます。
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_crl_dirが設定されていない限り)。
ssl_crl_dir
(string
)
#
SSLクライアント証明書失効リスト(CRL)が入っているディレクトリ名を設定します。
相対パスの場合は、データディレクトリからの相対パスになります。
このパラメータは、postgresql.conf
ファイルか、サーバのコマンドラインでのみ設定可能です。
デフォルトは空で、この場合CRLファイルは読み込まれません(ssl_crl_fileが設定されていない限り)。
このディレクトリはOpenSSLコマンドのopenssl rehash
あるいはc_rehash
で準備されなければなりません。
詳細はそれらのドキュメントをご覧ください。
この設定を使用すると、指定したディレクトリ内のCRLが接続時に必要に応じて読み込まれます。 新しいCRLをこのディレクトリに追加することが可能で、即座に使用されます。 サーバが起動されるとき、あるいは設定が再読込されるときに読み込まれるssl_crl_fileとは異なります。 両方の設定は一緒に使用できます。
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
ではそれを他のすべてのHIGH
とMEDIUM
暗号よりも後に位置づけます。
!aNULL
#認証を行わない匿名暗号スイートを無効にします。 そういった暗号スイートはMITM攻撃に対して脆弱で、使用すべきではありません。
OpenSSLのバージョンにより、利用可能な暗号スイートの詳細は異なります。
openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL'
コマンドを使って現在インストールされているOpenSSLのバージョンに関する詳細情報を得てください。
ここで得られるリストは、サーバキータイプにより実行時にフィルターされることに注意してください。
ssl_prefer_server_ciphers
(boolean
)
#
サーバのSSL暗号設定をクライアントに優先して使うかどうかを指定します。
このパラメータは、postgresql.conf
ファイルか、サーバのコマンドラインでのみ設定可能です。
デフォルトはon
です。
バージョン9.4より前の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プロトコルバージョンの最小値を設定します。
今の所使用できる値はTLSv1
、TLSv1.1
、TLSv1.2
、TLSv1.3
です。
古いバージョンのOpenSSLライブラリはすべての値をサポートしません。
サポートしていない値が設定されるとエラーが発生します。
TLS 1.0より前のプロトコルバージョン、すなわちSSLバージョン2あるいは3は常に無効となります。
デフォルトはTLSv1.2
で、本稿執筆時点では業界のベストプラクティスを満たしています。
このパラメータは、postgresql.conf
ファイルか、サーバのコマンドラインでのみ設定可能です。
ssl_max_protocol_version
(enum
)
#使用するSSL/TLSプロトコルバージョンの最大値を設定します。 使用できる値はssl_min_protocol_versionと、すべてのプロトコルバージョンを許可する空文字です。 デフォルトはすべてのプロトコルバージョンを許可する設定です。 最大プロトコルバージョンの設定は主にテスト、あるいは新しいプロトコルを使った時にコンポーネントのどこかに問題がある時に有用です。
このパラメータは、postgresql.conf
ファイルか、サーバのコマンドラインでのみ設定可能です。
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
ファイル内、またはサーバのコマンドラインのみで設定可能です。