连接与认证(CONNECTIONS AND AUTHENTICATION)类别参数
本文档介绍了系统配置参数中 连接与认证类别的相关参数。
注意!
为确保系统稳定与安全,请务必谨慎手动修改相关参数。
连接设置(Connection Settings)
bonjour
是否在数据库中启用 Bonjour。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | segments;system;restart |
bonjour_name
指定 Bonjour 广播名称。
- 默认情况下,使用计算机名称,指定为空字符串。
- 如果服务器未支持 Bonjour 服务,则忽略此选项。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |
gp_connection_send_timeout
在查询处理期间向无响应的 YMatrix 数据库用户客户端发送数据的超时时间(秒)。
- 值为
0
将禁用超时,YMatrix 数据库将无限期地等待客户端。 - 默认值为
3600
秒,即 1 小时。 - 达到超时后,将使用以下消息取消查询:
Could not send data to client: Connection timed out.
。
数据类型 | 默认值 | 设置分类 |
---|---|---|
int | 3600 | segments;system;reload |
listen_addresses
指定服务器将侦听来自客户端应用程序的连接的 TCP/IP 地址 —— 以逗号分隔的主机名和/或数字 IP 地址列表。
- 特殊条目
'*'
对应于所有可用的 IP 接口。如果列表为空,则只能连接 UNIX 域套接字。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | * | segments;system;restart |
max_connections
与数据库服务器的最大并发连接数。
- 在 YMatrix 数据库系统中,用户客户端连接仅通过 Master 节点实例。
- 运行 Standby 时需将此参数设置与 Master 相同或更高,否则查询语句将无法在 Standby 运行。
- Segment 节点实例的连接数应设为 Master 实例 5-10倍。
- 增加此参数时,还必须增加
max_prepared_transactions
。 - 增加
max_connections
可能会导致 YMatrix 请求更多共享内存。有关 YMatrix 服务器实例共享内存缓冲区的信息,请见 shared_buffers。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 300 | 10 ~ 262143 | segments;system;restart |
port
YMatrix 中节点实例的数据库监听端口。
- Master 和每个 Segment 都有自己的端口。
- 必须在
gp_segment_configuration
中同步更改。 - 此参数只能在服务器启动时设置,你必须在更改端口号之前关闭 YMatrix 数据库系统。
数据类型 | 默认值 | 设置分类 |
---|---|---|
int | 5432 | segments;system;restart |
superuser_reserved_connections
YMatrix 数据库中超级用户保留的连接数。
- 任何时候,活跃的并发连接数最多为
max_connections
减去superuser_reserved_connections
。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 10 | 1 ~ 262143 | segments;system;restart |
unix_socket_directories
服务器用于监听来自客户端应用的连接的 UNIX 域套接字目录。
- 通过列出用逗号分隔的多个目录可以建立多个套接字。
- 一个空值指定在任何 UNIX 域套接字上都不监听,在这种情况中只能使用 TCP/IP 套接字来连接到服务器。
- 除了套接字文件本身(名为
.s.PGSQL.nnnn
,其中nnnn
是服务器的端口号),一个名为.s.PGSQL.nnnn.lock
的普通文件会在每一个unix_socket_directories
目录中被创建。切勿手工移除以上文件。 - 此参数只能在服务器启动时设置。Windows 系统不可用。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | /tmp | segments;system;restart |
unix_socket_group
设置 UNIX 域套接字的所属组。
- 默认情况下,这是一个空字符串,它使用当前用户的默认组。
- 此参数只能在服务器启动时设置。Windows 系统不可用。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
string | UNIX 组名称 | segments;system;restart |
unix_socket_permissions
设置 UNIX 域套接字的访问权限。
- UNIX 域套接字使用普通的 UNIX 文件系统权限集。
- 此参数需以
0
开头并使用八进制表示法设置。 - 对于 UNIX 域套接字,只有写权限。
- 默认的权限是
0777
,即任何人都可以连接。合理的候选是0770
(仅用户和所属组的人可访问)和0700
(仅用户自己可访问)。这些均为数字 UNIX 文件权限模式(即系统调用chmod
或umask
命令接受的形式)。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0777 | 0000 ~ 0777 | segments;system;restart |
tcp_keepalives_count
指定服务器到客户端的连接被认为中断之前可以丢失的 TCP Keepalive 消息的数量。
- 这个参数只有在支持 TCP_KEEPCNT 或等效套接字选项的系统上才可以使用。在其他系统(如 Windows)上,必须为零。在通过 UNIX 域套接字连接的会话中,这个参数被忽略并总被读作零。
- 此参数用于不在 Primary 和 Mirror 之间的所有连接。
- 默认值为
0
,即使用系统默认值。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | segments;system;restart |
tcp_keepalives_idle
指定不活动多长时间(秒)之后通过 TCP 向客户端发送一个 Keepalive 消息。
- 此参数只有在支持 TCP_KEEPIDLE 或等效套接字选项的系统或 Windows 上才可以使用。在其他系统上,它必须为零。在通过 UNIX 域套接字连接的会话中,这个参数被忽略并且总是读作零。
- 在 Windows 上,设定值为
0
将设置这个参数为 2 小时,因为 Windows 不支持读取系统默认值。 - 此参数用于不在 Primary 和 Mirror 之间的所有连接。
- 默认值为
0
,即使用系统默认值。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | segments;system;restart |
tcp_keepalives_interval
规定未被客户端确认收到的 TCP Keepalive 消息应重新传输的时间间隔(秒)。
- 此参数只有在支持 TCP_KEEPINTVL 或等效套接字选项的系统或 Windows 上才可以使用。在其他系统上,必须为零。在通过 UNIX 域套接字连接的会话中,这个参数被忽略并总被读作零。
- 在 Windows 上,设定值为
0
将设置这个参数为 1 秒,因为 Windows 不支持读取系统默认值。 - 此参数用于不在 Primary 和 Mirror 之间的所有连接。
- 默认值为
0
,即使用系统默认值。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | segments;system;restart |
tcp_user_timeout
指定传输的数据在 TCP 连接被强制关闭之前可以保持未确认状态的时间量(毫秒)。
- 此参数只有在支持 TCP_USER_TIMEOUT 的系统上才被支持;在其他系统上,它必须为零。在通过 Unix-domain 套接字连接的会话中,此参数将被忽略并且始终读取为零。
- 在 Windows 上不支持该参数,并且必须为零。
- 默认值为
0
,即使用系统默认值。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 0 | 0 ~ INT_MAX | segments;system;restart |
安全与认证(Authentication)
authentication_timeout
允许完成客户端认证的最长时间(秒)。
- 如果一个客户端没有在这段时间里完成认证协议,服务器将关闭连接。这样就避免了出问题的客户端无限制地占有一个连接。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
int | 60 | 1 ~ 600 | segments;system;restart |
db_user_namespace
此参数启用针对每个数据库的用户名。
- 此参数默认是关掉的,只能在
postgresql.conf
文件中或者服务器命令行上设置。 - 如果这个参数为打开,应该把用户创建成
username@dbname
的形式。当一个连接客户端传来username
时,@
和dbname
会被追加到用户名并且服务器会查找这个与数据库相关的用户名。注意在 SQL 环境中用含有@
的名称创建用户时,需要把用户名放在引号内。 - 在这个参数被启用时,仍然可以创建普通的全局用户。而在客户端中指定这种用户时只需要简单地追加
@
,例如joe@
。在服务器查找该用户名之前,@
会被剥离掉。 db_user_namespace
会导致客户端和服务器的用户名表达形式不同。认证检查总是会以服务器的用户名表达形式来完成,因此认证方法必须针对服务器用户名而不是客户端用户名来配置。由于md5
方法在客户端和服务器两端都使用用户名作为盐值(salt),md5
不能与db_user_namespace
同时使用。- 这种特性的目的是在找到完整的解决方案之前提供一种临时的措施。在找到完整解决方案时,这个选项将被去除。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | master;system;restart |
krb_caseins_users
设置 Kerberos 用户名时是否区分大小写。
- 默认值大小写敏感。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | segments;system;restart |
krb_server_keyfile
设置 Kerberos 服务器密钥文件的位置。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |
password_encryption
当在 CREATE ROLE
或者 ALTER ROLE
中指定了密码,这个参数决定用于加密该口令的算法。
- 注意:老的客户端可能缺少对 SCRAM 认证机制的支持,因此无法使用用 SCRAM-SHA-256 加密的口令。详情请见 密码认证。
数据类型 | 默认值 | 取值范围 | 设置分类 |
---|---|---|---|
enum | md5(on) | md5(on) / scram-sha-256 | segments;session;reload |
SSL
ssl
是否启用 SSL 连接。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | segments;system;restart |
ssl_ca_file
指定包含 SSL 服务器证书颁发机构(CA)的文件名。
- 其中的相对路径是相对于数据目录的。
- 默认值为空,表示没有载入 CA 文件,并且客户端证书验证没有被执行。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |
ssl_cert_file
指定包含 SSL 服务器证书的文件名。
- 其中的相对路径是相对于数据目录的。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | server.crt | segments;system;restart |
ssl_ciphers
指定一个 SSL 密码列表,用于安全连接。
- 此参数的语法和所支持的值列表参见 OpenSSL 的 ciphers 手册页。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | HIGH:MEDIUM:+3DES:!aNULL | segments;system;restart |
ssl_crl_file
指定包含 SSL 服务器证书撤销列表(CRL)的文件名。
- 其中的相对路径是相对于数据目录的。
- 默认值是空,表示没有载入 CRL 文件。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |
ssl_dh_params_file
指定含有用于 SSL 密码的所谓临时 DH 家族的 Diffie-Hellman 参数的文件名。
- 默认值为空,这种情况下将使用内置的默认 DH 参数。使用自定义的 DH 参数可以降低攻击者破解众所周知的内置 DH 参数的风险。可以用命令
openssl dhparam -out dhparams.pem 2048
创建自己的 DH 参数文件。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |
ssl_ecdh_curve
指定用在 ECDH 密钥交换中的曲线名称。
- 它需要被所有连接的客户端支持。
- 它不需要与服务器椭圆曲线密钥使用的曲线相同。
- 此参数只能在
postgresql.conf
文件中或者服务器命令行上设置。 - OpenSSL 命名了最常见的曲线:
prime256v1 (NIST P-256)
、secp384r1 (NIST P-384)
、secp521r1 (NIST P-521)
。openssl ecparam -list_curves
命令可以显示可用曲线的完整列表。但并不是所有的都在 TLS 中可用。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | prime256v1 | segments;system;restart |
ssl_key_file
指定包含 SSL 服务器私钥的文件名。
- 其中的相对路径是相对于数据目录的。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | server.key | segments;system;restart |
ssl_max_protocol_version
设置要使用的最大 SSL/TLS 协议版本。
- 有效的版本同
ssl_min_protocol_version
。 - 设置最大协议版本主要用于测试某个组件在与较新的协议配合工作时是否会出现问题。
- 默认值为空字符串,即允许任何版本。
数据类型 | 默认值 | 设置分类 |
---|---|---|
enum | segments;system;restart;superuser |
ssl_min_protocol_version
设置要使用的最小 SSL/TLS 协议版本。
- 当前的可用版本包括:TLSv1,TLSv1.1,TLSv1.2,TLSv1.3。旧版本的 OpenSSL 库不支持所有值,如果选择了不支持的设置将会引发错误。TLS 1.0 之前的协议版本,也就是 SSL 版本 2 和 3 是禁用的。
- 默认值是 TLSv1,主要用来支持 OpenSSL 库的老版本。如果所有软件组件能支持较新的协议版本,你可以将它设置为较高的值。
数据类型 | 默认值 | 设置分类 |
---|---|---|
enum | TLSv1 | segments;system;restart |
ssl_passphrase_command
设置当需要一个密码(例如一个私钥)来解密 SSL 文件时会调用的一个外部命令。
- 默认情况下,这个参数为空,表示使用内建的提示机制。
- 该命令必须将密码打印到标准输出并且以代码
0
退出。在该参数值中,%
被替换为一个提示字符串(要得到文字%
,应该写成%%
)。注意该提示字符串将可能含有空格,因此要确保加上适当的引号。如果输出的末尾有单一的新行,它会被剥离掉。 - 该命令实际上并不一定要提示用户输入一个密码。它可以从文件中读取密码、从钥匙链得到密码等等。确保选中的机制足够安全是用户的责任。
数据类型 | 默认值 | 设置分类 |
---|---|---|
string | segments;system;restart |
ssl_passphrase_command_supports_reload
此参数决定在配置重载期间如果一个密钥文件需要口令时,是否也调用 ssl_passphrase_command
设置的密码命令。
- 如果这个参数为
off
(默认),那么在重载期间将忽略ssl_passphrase_command
,如果在此期间需要密码则 SSL 配置将不会被重载。 - 对于要求一个 TTY(当服务器正在运行时可能是不可用的)来进行提示的命令,这种设置是合适的。例如,如果密码是从一个文件中得到的,将这个参数设置为
on
可能是合适的。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | off | segments;system;restart |
ssl_prefer_server_ciphers
指定是否使用服务器的 SSL 密码首选项,而不是客户端的。
- 这个设置主要用于版本的向后兼容性。使用服务器的首选项通常会更好,因为服务器更可能会被合适地配置。
数据类型 | 默认值 | 设置分类 |
---|---|---|
boolean | on | segments;system;restart |