listen_addresses
(string
) #指定服务器用于侦听客户端应用程序连接的 TCP/IP 地址。值采用由主机名和/或数字 IP 地址组成的逗号分隔列表形式。特殊条目 *
与所有可用的 IP 接口相对应。条目 0.0.0.0
允许侦听所有 IPv4 地址,而 ::
允许侦听所有 IPv6 地址。如果列表为空,服务器不会侦听任何 IP 接口,在这种情况下只能使用 Unix 域套接字连接到它。如果列表不为空,如果服务器至少可以在一个 TCP/IP 地址上侦听,它将启动。对于无法打开的任何 TCP/IP 地址,将发出警告。默认值是 localhost,它只允许建立本地 TCP/IP ”“回送”连接。
虽然客户端身份验证(第 20 章)可以对可以访问服务器的人进行细粒度控制,但 listen_addresses
控制哪些接口接受连接尝试,这可以帮助防止在不安全的网络接口上重复发出恶意连接请求。此参数只能在服务器启动时设置。
port
(integer
) #服务器侦听的 TCP 端口;默认值为 5432。请注意,对于服务器侦听的所有 IP 地址,都使用相同的端口号。此参数只能在服务器启动时设置。
max_connections
(integer
) #确定与数据库服务器的最大并发连接数。默认值通常为 100 个连接,但是如果内核设置不支持它,则可能更少(取决于 initdb)。此参数只能在服务器启动时设置。
PostgreSQL 会根据 max_connections
的值直接确定某些资源的大小。增加该值会导致更多分配这些资源,包括共享内存。
运行备用服务器时,您必须将此参数设置为与主服务器相同或更高的值。否则,将在备用服务器中不允许查询。
reserved_connections
(integer
) #该设置确定为拥有 pg_use_reserved_connections
角色权限的连接预留的连接“槽”数量。只要空闲连接槽的数量大于 superuser_reserved_connections,但小于或等于 superuser_reserved_connections
与 reserved_connections
之和,那么仅接受超级用户和拥有 pg_use_reserved_connections
权限的角色的新连接。如果 superuser_reserved_connections
或更少连接槽可用,则仅接受超级用户的新连接。
默认值为零连接。该值必须小于 max_connections
减去 superuser_reserved_connections
。该参数仅可在服务器启动时设置。
superuser_reserved_connections
(integer
) #该设置确定为 PostgreSQL 超级用户预留的连接“槽”数量。最多可同时建立 max_connections个连接。只要活动并发连接的数量至少为 max_connections
减去 superuser_reserved_connections
,那么仅接受超级用户的新连接。此参数保留的连接槽旨在当 reserved_connections 预留的槽已用尽后,作为紧急用途的最终资源。
默认值为三个连接。该值必须小于 max_connections
减去 reserved_connections
。该参数仅可在服务器启动时设置。
unix_socket_directories
(string
) #指定服务器监听客户端应用程序连接的 Unix 域套接字目录。可以通过列出多个目录(以逗号分隔)来创建多个套接字。条目之间的空白会被忽略;如果需要在名称中包含空白或逗号,请使用双引号将目录名称括起来。空值表示不监听任何 Unix 域套接字,在这种情况下,只能使用 TCP/IP 套接字连接到服务器。
以 @
开头的值指定应创建抽象命名空间中的 Unix 域套接字(目前仅在 Linux 上受支持)。在这种情况下,此值不指定 “目录”,而指定一个用于计算实际套接字名称的前缀,其方式与文件系统命名空间相同。虽然抽象套接字名称前缀可以选择,因为它不是文件系统位置,但惯例是使用文件系统类似的值,例如 @/tmp
。
默认值通常为 /tmp
,但可在构建时更改。在 Windows 上,默认值为空,这意味着默认情况下不创建 Unix 域套接字。此参数只能在服务器启动时设置。
除了以 .s.PGSQL.
命名的套接字文件本身(其中 nnnn
nnnn
为服务器的端口号)之外,还将在每个 unix_socket_directories
目录中创建一个名为 .s.PGSQL.
的普通文件。这两个文件都不得手动删除。对于抽象命名空间中的套接字,不会创建锁定文件。nnnn
.lock
unix_socket_group
(string
) #设置 Unix 域套接字的所有者组。(套接字的所有者用户始终是启动服务器的用户。)结合参数 unix_socket_permissions
,可将其用作 Unix 域连接的附加访问控制机制。默认情况下,它是一个空字符串,它使用服务器用户的默认组。此参数只能在服务器启动时设置。
此参数不受 Windows 支持。任何设置都将被忽略。此外,抽象命名空间中的套接字没有文件所有者,因此在这种情况下也会忽略此设置。
unix_socket_permissions
(integer
) #设置 Unix 域套接字的访问权限。Unix 域套接字使用常用的 Unix 文件系统权限集。参数值应为以 chmod
和 umask
系统调用接受的格式指定的数字模式。(要使用惯用八进制格式,该数字必须以 0
(零)开头。)
默认权限为 0777
,这意味着任何人都可以连接。合理的替代方案有 0770
(仅限用户和组,另请参见 unix_socket_group
)和 0700
(仅限用户)。(请注意,对于 Unix 域套接字,只有写权限才有关系,因此设置或撤销读取或执行权限没有意义。)
此访问控制机制与第 20 章中描述的机制无关。
此参数只能在服务器启动时设置。
在完全忽略套接字权限的系统(尤其是 Solaris 10 中的 Solaris)上,此参数不相关。可以将 unix_socket_directories
指向搜索权限仅限于所需受众的目录,从而达到类似的效果。
抽象命名空间中的套接字没有文件权限,因此在此情况下也会忽略此设置。
bonjour
(boolean
) #启用通过 Bonjour 宣传服务器的存在。默认值为关闭。此参数只能在服务器启动时设置。
bonjour_name
(string
) #指定 Bonjour 服务名称。如果此参数设为空字符串 ''
(这是默认值),则使用计算机名称。如果服务器未编译为支持 Bonjour,则忽略此参数。此参数只能在服务器启动时设置。
tcp_keepalives_idle
(integer
) #指定在操作系统向客户端发送 TCP 保活消息之前的网络非活动时间。如果此值未指定单位,则以秒为单位。值为 0(默认值)将选择操作系统的默认值。在 Windows 上,将值设为 0 会将此参数设为 2 小时,原因是 Windows 不提供读取系统默认值的方法。此参数仅在支持 TCP_KEEPIDLE
或等效套接字选项的系统以及 Windows 上受支持;在其他系统上,它必须为零。在通过 Unix 域套接字连接的会话中,将忽略此参数并且始终读为零。
tcp_keepalives_interval
(integer
) #指定在没有得到客户端确认的 TCP 保持活动消息被重新传输前需要经过的时间量。如果没有单位,该值将被视为秒。指定为 0(默认值)将选择操作系统的默认值。在 Windows 上,将值设置为 0 将把此参数设置为 1 秒,因为 Windows 不提供读取系统默认值的方法。此参数仅在支持 TCP_KEEPINTVL
或等效套接字选项的系统上受到支持,而在 Windows 上不受支持;在其他系统上,此参数必须为零。在通过 Unix 域套接字连接的会话中,将忽略该参数,并始终读取为零。
tcp_keepalives_count
(integer
) #指定在服务器与客户端的连接被认为已断开之前允许丢失的 TCP 保持活动消息的数量。指定为 0(默认值)将选择操作系统的默认值。此参数仅在支持 TCP_KEEPCNT
或等效套接字选项(不包括 Windows)的系统上受到支持;在其他系统上,此参数必须为零。在通过 Unix 域套接字连接的会话中,将忽略该参数,并始终读取为零。
tcp_user_timeout
(integer
) #指定在 TCP 连接被强制关闭之前,已传输数据可能保持未确认状态的时间量。如果没有单位,该值将被视为毫秒。指定为 0(默认值)将选择操作系统的默认值。此参数仅在支持 TCP_USER_TIMEOUT
(不包括 Windows)的系统上受到支持;在其他系统上,此参数必须为零。在通过 Unix 域套接字连接的会话中,将忽略该参数,并始终读取为零。
client_connection_check_interval
(integer
) #设置在正在运行查询时检查客户端是否仍然已连接的可选检查之间的时间间隔。检查通过轮询套接字执行,并允许在内核报告连接已关闭的情况下更早地中止长时间运行的查询。
此选项依赖于 Linux、macOS、illumos 和 BSD 操作系统系列公开的内核事件,当前在其他系统上不可用。
如果没有单位,将该值视为毫秒。默认值是 0
,它会禁用连接检查。如果没有连接检查,服务器将仅在与套接字的下一次交互(等待数据、接收数据或发送数据)中检测到连接丢失。
为了让内核在所有场景(包括网络故障)中可靠地在已知时间内检测丢失的 TCP 连接,可能还需要调整操作系统或 PostgreSQL 的 tcp_keepalives_idle、tcp_keepalives_interval 和 tcp_keepalives_count 设置的 TCP keepalive 设置。
authentication_timeout
(integer
) #完成客户端身份验证允许的最大时间量。如果潜在客户端在此时间内未完成身份验证协议,服务器将关闭连接。这可防止挂起的客户端无限期占用连接。如果不带单位指定此值,则将其视为秒。默认值是一分钟 (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 加密的密码。请参阅 第 20.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
文件或服务器命令行中设置。更多信息请参见 第20.6节。
krb_caseins_users
(boolean
) #设置 GSSAPI 用户名是否不区分大小写。默认值为 off
(区分大小写)。此参数只能在 postgresql.conf
文件或服务器命令行中设置。
gss_accept_delegation
(boolean
) #设置是否应接受 GSSAPI 委派来自客户端。默认值 off
表示客户端凭证将不会被接收。将其更改为 on
将使服务器接收委托给它的来自客户端的凭证。此参数只能在 postgresql.conf
文件或服务器命令行中设置。
更多有关设置的信息请参阅第18.9节SSL使用加密协议控制传输的过程配置参数称为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 不同,后者会让文件中的 CRL 在服务器启动时间或重新加载配置时进行加载。这两个设置可以一起使用。
ssl_key_file
(string
) #指定包含 SSL 服务器私钥的文件的名称。相对路径相对于数据目录。此参数只能在 postgresql.conf
文件或服务器命令行中设置。默认值为 server.key
。
ssl_ciphers
(字符串
) #指定一个SSLSSL 连接可以使用密码组的列表。有关此设置的语法和支持的值列表,请参阅 OpenSSL 包中的 ciphers 手册页。此设置仅影响使用 TLS 1.2 及以下版本的连接。目前还没有设置可以控制 TLS 1.3 连接使用的密码组选项。默认值为 HIGH:MEDIUM:+3DES:!aNULL
。除非您有特定的安全要求,否则默认值通常是一个合理的选择。
此参数只能在 postgresql.conf
文件或服务器命令行中设置。
默认值的解释
可用的密码组详细信息因 OpenSSL 版本而异。使用命令 openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL'
查看当前安装的 OpenSSL 版本的实际详细信息。请注意,此列表在运行时会根据服务器密钥类型进行筛选。
ssl_prefer_server_ciphers
(布尔值
) #指定是否使用服务器的 SSL 密码组首选项,而不是客户端的首选项。此参数只能在 postgresql.conf
文件或服务器命令行中设置。默认值为 on
。
PostgreSQL 9.4 之前的版本没有此设置,并且始终使用客户端的偏好设置。此设置主要是为了与这些版本保持向后兼容。使用服务器的偏好设置通常更好,因为它更有可能配置得当。
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
) #指定用于 SSL 密码中所谓的短暂 DH 家族的 Diffie-Hellman 参数的文件名称。默认情况下为空,在这种情况下将使用已编译的默认 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
设置的密码短语命令是否将在密钥文件需要密码短语时在配置重新加载期间也会被调用。如果此参数关闭(默认),那么 ssl_passphrase_command
将在重新加载期间被忽略,并且如果需要密码短语,则不会重新加载 SSL 配置。该设置适用于需要 TTY 来提示的命令,该命令在服务器运行时可能不可用。如果密码短语是从文件获取的,则将此参数设置为开启可能是合适的,例如。
此参数只能在 postgresql.conf
文件或服务器命令行中设置。