listen_addresses
(string
)
#
指定服务器用于监听来自客户端应用程序的连接的TCP/IP地址(指服务器网卡IP地址)。
该值采用逗号分隔的主机名和/或数字IP地址的形式。特殊条目*
对应于所有可用的IP接口。
条目0.0.0.0
允许监听所有IPv4地址,::
允许监听所有IPv6地址。
如果列表为空,则服务器不会在任何IP接口上监听,此时只能使用Unix域套接字进行连接。
如果列表不为空,则服务器将在至少一个TCP/IP地址上可以监听时启动。
对于任何无法打开的TCP/IP地址,将发出警告。
默认值为localhost,仅允许进行本地TCP/IP“回环”连接。
在客户端认证(Chapter 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-domain 套接字(目前仅在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
接受的 形式(如果使用自定义的八进制格式,数字必须以一个0
(零)开头)。
默认的权限是0777
,意思是任何人都可以连接。合理的候选是0770
(只有用户和同组的人可以访问, 又见unix_socket_group
)和0700
(只有用户自己可以访问)(请注意,对于 Unix 域套接字,只有写权限有麻烦,因此没有对读取和执行权限的设置和收回)。
这个访问控制机制与Chapter 20中的用户认证没有关系。
这个参数只能在服务器启动时设置。
这个参数与完全忽略套接字权限的系统无关,尤其是自版本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连接,它可能还需要调整操作系统的TCP保持连接设置, 或者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加密的口令。详情请参考Section 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
文件中或者服务器命令行上设置。
详情请参考Section 20.6。
krb_caseins_users
(boolean
)
#
设置是否应该以大小写不敏感的方式对待GSSAPI用户名。默认值是off
(大小写敏感)。这个参数只能在postgresql.conf
文件中或者服务器命令行上设置。
gss_accept_delegation
(boolean
)
#
设置是否应接受来自客户端的GSSAPI委派。
默认值是off
,这意味着不会接受来自客户端的凭据。
将其更改为on
将使服务器接受客户端委派给它的凭据。
此参数只能在postgresql.conf
文件中或服务器命令行上设置。
查看Section 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
来准备。
详请参阅相应文档
当使用此设置时,在连接时会按需加载指定目录下的CRLs。 新的CRLs可以添加到该目录中,并可以立即使用。 这与ssl_crl_file不同,那个会导致文件中的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
文件中或者服务器命令行上设置。
默认值的解释:
可用的密码组细节可能会随着OpenSSL 版本变化。
可使用命令 openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL'
来查看当前安装的OpenSSL版本的实际细节。
注意这个列表是根据服务器密钥类型在运行时过滤过的。
ssl_prefer_server_ciphers
(boolean
)
#
指定是否使用服务器的 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 and 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
设置的密码命令。
如果这个参数为off(默认),那么在重载期间将忽略ssl_passphrase_command
,如果在此期间需要密码则SSL配置将不会被重载。
对于要求一个TTY(当服务器正在运行时可能是不可用的)来进行提示的命令,这种设置是合适的。
例如,如果密码是从一个文件中得到的,将这个参数设置为on可能是合适的。
这个参数只能在postgresql.conf
文件中或通过服务器命令行进行设置。