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
ですが、ビルド時に変更できます。
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ドメインソケットでは書き込み権限だけが問題になるため、読み込みや実行のパーミッションを設定または解除する意味はありません。)
このアクセス制御機構は 第20章で記述されたものとは別個のものです。
このパラメータはサーバ起動時のみ設定可能です。
このパラメータはSolaris 10の時点でのSolarisなど、ソケットのパーミッションを完全に無視するシステムでは無関係です。
こうしたシステムでは、許可したいユーザだけが検索パーミッションを持つディレクトリをunix_socket_directories
で指すようにすることによって同じような効果を得ることができます。
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ではサポートされておらず、ゼロでなければなりません。
authentication_timeout
(integer
)
クライアント認証を完了するまでの最大時間です。
もし、この時間内に自称クライアントが認証プロトコルを完了しない場合、サーバは接続を閉じます。
これはハングしたクライアントが接続を永久に占有することを防ぎます。
この値が単位なしで指定された場合は、秒単位であるとみなします。
デフォルトは1分(1m
)です。
このパラメータはpostgresql.conf
ファイル、またはサーバのコマンドラインでのみ設定可能です。
password_encryption
(enum
)
CREATE ROLEあるいはALTER ROLEでパスワードを設定する際に、このパラメータはパスワードを暗号化するアルゴリズムを指定します。
デフォルト値はmd5
で、パスワードをMD5ハッシュとして格納します(on
もmd5
の別名として受付けます)。
このパラメータを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
では、クライアントおよびサーバの両方でユーザ名をソルトとして使用するので、md5
をdb_user_namespace
と一緒に使用することはできません。
この機能は完全な解決方法が見つかるまでの一時的なものです。 完全な解決方法が見つかったら、このオプションは削除される予定です。
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
ではそれを他のすべてのHIGH
とMEDIUM
暗号よりも後に位置づけます。
!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プロトコルバージョンの最小値を設定します。
今の所使用できる値はTLSv1
、TLSv1.1
、TLSv1.2
、TLSv1.3
です。
古いバージョンのOpenSSLライブラリはすべての値をサポートしません。
サポートしていない値が設定されるとエラーが発生します。
TLS 1.0より前のプロトコルバージョン、すなわちSSLバージョン2あるいは3は常に無効となります。
デフォルトはTLSv1.2
で、本稿執筆時点では業界のベストプラクティスを満たしています。
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
ファイル内、またはサーバのコマンドラインのみで設定可能です。