PostgreSQL 10.1 手册_部分 III. 服务器管理_第 19 章 服务器配置_19.3. 连接和认证

本文涉及的产品
云原生数据库 PolarDB MySQL 版,Serverless 5000PCU 100GB
简介: 19.3. 连接和认证 19.3.1. 连接设置 19.3.2. 安全和认证 19.3.1. 连接设置 listen_addresses (string) 指定服务器在哪些 TCP/IP 地址上监听客户端连接。

19.3. 连接和认证

19.3.1. 连接设置

listen_addresses (string)

指定服务器在哪些 TCP/IP 地址上监听客户端连接。值的形式是一个逗号分隔的主机名和/或数字 IP 地址列表。特殊项*对应所有可用 IP 接口。项0.0.0.0允许监听所有 IPv4 地址并且::允许监听所有 IPv6 地址。如果列表为空,服务器将根本不会监听任何 IP 接口,在这种情况中只能使用 Unix 域套接字来连接它。默认值是localhost,它只允许建立本地 TCP/IP 环回连接。虽然客户端认证(第 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,但是在编译时可以被改变。这个参数只能在服务器启动时设置。

除了套接字文件本身(名为.s.PGSQL.nnnn,其中nnnn是服务器的端口号),一个名为.s.PGSQL.nnnn.lock的普通文件会在每一个unix_socket_directories目录中被创建。任何一个都不应该被手工移除。

Windows下没有 Unix 域套接字,因此这个参数与 Windows 无关。

unix_socket_group (string)

设置 Unix 域套接字的所属组(套接字的所属用户总是启动服务器的用户)。可以与选项unix_socket_permissions一起用于对 Unix域连接进行访问控制。默认是一个空字符串,表示服务器用户的默认组。这个参数只能在服务器启动时设置。

Windows 下没有 Unix 域套接字,因此这个参数与 Windows 无关。

unix_socket_permissions (integer)

设置 Unix 域套接字的访问权限。Unix 域套接字使用普通的 Unix 文件系统权限集。这个参数值应该是数字的形式,也就是系统调用chmodumask接受的 形式(如果使用自定义的八进制格式,数字必须以一个0(零)开头)。

默认的权限是0777,意思是任何人都可以连接。合理的候选是0770(只有用户和同组的人可以访问, 又见unix_socket_group)和0700(只有用户自己可以访问)(请注意,对于 Unix 域套接字,只有写权限有麻烦,因此没有对读取和执行权限的设置和收回)。

这个访问控制机制与第 20 章中的用户认证没有关系。

这个参数只能在服务器启动时设置。

这个参数与完全忽略套接字权限的系统无关,尤其是自版本10以上的Solaris。 在那些系统上,可以通过把unix_socket_directories指向一个把搜索权限 限制给指定用户的目录来实现相似的效果。 因为 Windows 下没有 Unix 域套接字,因此这个参数也与 Windows 无关。

bonjour (boolean)

通过Bonjour广告服务器的存在。默认值是关闭。 这个参数只能在服务器启动时设置。

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 不支持该参数,且必须为零。

19.3.2. 安全和认证

authentication_timeout (integer)

完成客户端认证的最长时间,以秒计。如果一个客户端没有在这段时间里完成 认证协议,服务器将关闭连接。这样就避免了出问题的客户端无限制地占有一个连接。默认值是 1分钟(1m)。这个参数只能在服务器命令行上或者在postgresql.conf文件中设置。

ssl (boolean)

启用SSL连接。请在使用这个参数之前阅读第 18.9 节。这个选项只能在postgresql.conf文件或服务器命令行上设置。默认是off

ssl_ca_file (string)

指定包含 SSL 服务器证书颁发机构(CA)的文件名。 相对路径是相对于数据目录。该参数只能在postgresql.conf 文件或服务器命令行上设置。默认值为空,表示不载入 CA 文件, 并且不执行客户端证书验证。

在之前的 PostgreSQL 发布中,这个文件的名字被硬编码成 root.crt

ssl_cert_file (string)

指定包含 SSL 服务器证书的文件名。相对路径是相对于数据目录的。 这个参数只能在postgresql.conf文件或服务器命令行上设置。 默认值是server.crt

ssl_crl_file (string)

指定包含 SSL 服务器证书撤销列表(CRL)的文件名。 相对路径是相对于数据目录。这个参数只能在postgresql.conf 文件中或服务器命令行上设置。默认值为空,意味着不载入 CRL 文件。

在之前的 PostgreSQL 发布中,这个文件的名称被硬编码为root.crl。 相对路径是相对于数据目录。这个参数只能在服务器启动时设置。

ssl_key_file (string)

指定包含 SSL 服务器私钥的文件名。 相对路径是相对于数据目录。这个参数只能在postgresql.conf 文件中或服务器命令行上设置。默认值为server.key

ssl_ciphers (string)

指定一个SSL密码列表,用于安全连接。 这个设置的语法和所支持的值列表可以 参见OpenSSL包中的 ciphers手册页。 这个参数只能在postgresql.conf 文件中或服务器命令行上设置。默认值是 HIGH:MEDIUM:+3DES:!aNULL。默认值通常是合理的选择, 除非你有特别的安全性需求。

默认值的解释:

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文件中或服务器命令行上设置。 默认是true

老的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中可用。

password_encryption (enum)

当在CREATE USERALTER ROLE 中指定了一个密码时,这个参数决定加密密码所使用的算法。默认值是md5, 它将密码存储为MD5哈希(也接受on作为md5的别名)。 将该参数设置为scram-sha-256将使用SCRAM-SHA-256加密密码。

请注意,较老的客户端可能缺少对SCRAM认证机制的支持, 因此不适用于使用SCRAM-SHA-256加密的密码。有关更多详细信息, 请参阅第 20.3.2 节

ssl_dh_params_file (string)

指定包含用于所谓的短暂DH系列SSL密码的Diffie-Hellman参数的文件的名称。 缺省值为空,在这种情况下,使用默认编译的DH参数。 如果攻击者设法破解众所周知的内编译DH参数,使用自定义DH参数可以减少暴露。 可以使用命令openssl dhparam -out dhparams.pem 2048 创建您自己的DH参数文件。

该参数只能在postgresql.conf文件或服务器命令行上设置。

krb_server_keyfile (string)

设置 Kerberos 服务器密钥文件的位置。详见第 20.3.3 节。这个参数只能在 postgresql.conf文件中或服务器命令行上进行设置。

krb_caseins_users (boolean)

设置 Kerberos 和 GSSAPI 用户名是否应区分大小写。默认是off(区分大小写)。这个参数只能在 postgresql.conf文件中或服务器命令行上进行设置。

db_user_namespace (boolean)

允许针对每个数据库的用户名。默认是关闭的。这个参数只能在 postgresql.conf文件中或服务器命令行上进行设置。

如果打开这个参数,你应该以username@dbname的方式创建用户。 当一个username被连接着的客户端传递时,@和数据库名被增加到用户名中并且那个数据库相关的用户名会被服务器查找。注意,当你在 SQL 环境里创建包含@的用户名时, 你需要用引号包围用户名。

打开这个参数之后,你还是能够创建普通的全局用户。只要在客户端指定用户名时附加一个@,例如joe@。 在服务器查找这个用户名之前,这个@会被剥除。

db_user_namespace导致客户端和服务器的用户名表示变得不同。 认证检查总是使用服务器用户名来完成,因此认证方法必须为服务器的用户名配置,而不是客户端的用户名。因为在客户端和服务器上md5都使用用户名作为盐粒,md5不能和db_user_namespace一起使用。

注意

这个特性只是一种临时方法,直到找到一个完全的解决方案。那个时候, 这个选项将被删除。

本文转自PostgreSQL中文社区,原文链接:19.3. 连接和认证

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
SQL 分布式计算 DataWorks
DataWorks常见问题之dataworks连接FTP服务器失败如何解决
DataWorks是阿里云提供的一站式大数据开发与管理平台,支持数据集成、数据开发、数据治理等功能;在本汇总中,我们梳理了DataWorks产品在使用过程中经常遇到的问题及解答,以助用户在数据处理和分析工作中提高效率,降低难度。
|
1月前
|
弹性计算 Linux 网络安全
连接并管理ECS
连接并管理ECS
52 4
|
24天前
|
运维 Linux Nacos
nacos常见问题之远程访问不报错放到服务器上nacos连接超时如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
54 1
|
11天前
|
网络协议 Python
pythonTCP客户端编程连接服务器
【4月更文挑战第6天】本教程介绍了TCP客户端如何连接服务器,包括指定服务器IP和端口、发送连接请求、处理异常、进行数据传输及关闭连接。在Python中,使用`socket`模块创建Socket对象,然后通过`connect()`方法尝试连接服务器 `(server_ip, server_port)`。成功连接后,利用`send()`和`recv()`进行数据交互,记得在通信完成后调用`close()`关闭连接,确保资源释放和程序稳定性。
|
20天前
|
弹性计算 Linux 测试技术
ECS网页问题之认证实验考不了如何解决
ECS(Elastic Compute Service,弹性计算服务)是云计算服务提供商提供的一种基础云服务,允许用户在云端获取和配置虚拟服务器。以下是ECS服务使用中的一些常见问题及其解答的合集:
253 1
|
15天前
|
弹性计算 关系型数据库 MySQL
阿里云数据库服务器价格表,数据库创建、连接和使用教程
阿里云数据库使用流程包括购买和管理。选择所需数据库类型如MySQL,完成实名认证后购买,配置CPU、内存和存储。确保数据库地域与ECS相同以允许内网连接。创建数据库和账号,设置权限。通过DMS登录数据库,使用账号密码连接。同一VPC内的ECS需添加至白名单以进行内网通信。参考官方文档进行详细操作。
74 3
|
1月前
|
安全 Shell 网络安全
如何通过SSH连接云服务器
当你购买云服务器后,你可以通过SSH方式安全的连接到你的云服务器,因为只有你连上云服务器后才能进行服务器相关的配置操作。这里分别介绍了MAC用户和Windows用户如何通过SSH连接云服务器。
206 1
如何通过SSH连接云服务器
|
1月前
|
数据安全/隐私保护 Windows
Windows Server 2003 搭建邮件服务器实现自建邮箱域名及账户并连接外网
Windows Server 2003 搭建邮件服务器实现自建邮箱域名及账户并连接外网
27 0
|
20天前
|
关系型数据库 分布式数据库 数据库
成都晨云信息技术完成阿里云PolarDB数据库产品生态集成认证
近日,成都晨云信息技术有限责任公司(以下简称晨云信息)与阿里云PolarDB PostgreSQL版数据库产品展开产品集成认证。测试结果表明,晨云信息旗下晨云-站群管理系统(V1.0)与阿里云以下产品:开源云原生数据库PolarDB PostgreSQL版(V11),完全满足产品兼容认证要求,兼容性良好,系统运行稳定。
|
27天前
|
关系型数据库 分布式数据库 数据库
PolarDB常见问题之数据库不能自己减少节点如何解决
PolarDB是阿里云推出的下一代关系型数据库,具有高性能、高可用性和弹性伸缩能力,适用于大规模数据处理场景。本汇总囊括了PolarDB使用中用户可能遭遇的一系列常见问题及解答,旨在为数据库管理员和开发者提供全面的问题指导,确保数据库平稳运行和优化使用体验。