🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 18.3\. 连接和认证 ## 18.3.1\. 连接设置 `listen_addresses` (`string`) 声明服务器监听客户端连接的TCP/IP地址。值是一个逗号分隔的主机名和/或数字IP地址。 特殊项`*`对应所有可用IP接口。 `0.0.0.0`允许监听所有IPV4地址,并且`::`允许监听所有IPV6地址。 如果这个列表是空的,那么服务器不会监听任何IP接口, 这种情况下,只有Unix域套接字可以用于连接数据库。 缺省值localhost只允许进行本地"回环"连接。 客户端认证([Chapter 19](#calibre_link-14))允许细粒度控制谁能访问服务器, `listen_addresses`控制尝试连接哪个接口。 这个参数只能在服务器启动的时候设置。 `port` (`integer`) 服务器监听的TCP端口;缺省是5432。请注意同一个端口号用于服务器监听的所有IP地址。 这个参数只能在服务器启动的时候设置。 `max_connections` (`integer`) 允许和数据库连接的最大并发连接数。缺省通常是100, 但是如果内核设置不支持这么大(在initdb的时候判断),可能会比这个数少。 这个参数只能在服务器启动的时候设置。 当运行一个备用服务器,你必须将此参数设置为比主服务器上相同的或更高的值。否则, 不允许在备用服务器上进行查询。 `superuser_reserved_connections` (`integer`) 决定为PostgreSQL超级用户连接而保留的连接"槽位"。 一次最多可以同时激活[max_connections](#calibre_link-441)个连接。在活跃的并发连数接到了`max_connections` 减去`superuser_reserved_connections`的时候,新的连接就只能由超级用户发起了, 并且不接收新的复制连接。 缺省值是3。这个值必须小于`max_connections`的值。 这个参数只能在服务器启动的时候设置。 `unix_socket_directories` (`string`) 指定Unix域套接字(S)的目录, 并且服务器监听来自客户端应用程序的连接。 多个套接字可以通过列出多个用逗号分隔的目录创建。 忽略条目之间的空白; 如果你需要包含空格或逗号的名字,增加带有双引号的目录名。 空值指定不监听任何Unix域的套接字, 在这种情况下,只有TCP/IP套接字可以用于连接到服务器。 默认值通常是`/tmp`,但可以在编译的时候改变。 这个参数只能在服务器启动的。 除套接字文件本身外,它被命名为 `.s.PGSQL.``_nnnn_`,其中 `_nnnn_`是服务器的端口号,普通文件 命名的`.s.PGSQL.``_nnnn_`.lock 将在每个`unix_socket_directories`目录中创建。 永远都不应该手动删除这两个文件。 这个参数在Windows上是无关紧要的,它不具有Unix域套接字。 `unix_socket_group` (`string`) 设置Unix域套接字的所属组(套接字的所属用户总是启动服务器的用户)。 可以与选项`unix_socket_permissions`一起用于对套接字进行访问控制。 缺省是一个空字符串, 表示当前服务器用户的缺省组。这个选项只能在服务器启动的时候设置。 这个参数在Windows上是无关紧要的,它不具有Unix域套接字。 `unix_socket_permissions` (`integer`) 设置Unix域套接字的访问权限。Unix域套接字使用普通的Unix文件系统权限集。 这个参数值应该是数值的形式,也就是系统调用`chmod`和`umask` 接受的形式。如果使用自定义的八进制格式,数字必须以`0`开头。 缺省的权限是`0777`,意思是任何人都可以连接。合理的候选是`0770` (只有用户和同组的人可以访问, 又见`unix_socket_group`)和`0700`(只有用户自己可以访问)。 请注意,对于Unix域套接字,只有写权限有意义, 因此在设置和撤销读和执行权限中没有任何意义。 这个访问控制机制与[Chapter 19](#calibre_link-14)里描述的用户认证毫无关系。 这个参数只能在服务器启动的时候设置。 这个参数在Windows上是无关紧要的,它不具有Unix域套接字。 `bonjour` (`boolean`) 通过Bonjour启动广播服务器的存在。缺省是关闭的。 这个值只能在服务器启动的时候设置。 `bonjour_name` (`string`) 声明Bonjour服务器名称。 空字符串`''`(缺省值)表示使用计算机名。 如果编译时没有打开Bonjour支持那么将忽略这个参数。 这个值只能在服务器启动的时候设置。 `tcp_keepalives_idle` (`integer`) 声明发送保持活跃信号的间隔秒数,不发送保持活跃信号,连接就会处于闲置状态。 零使用系统默认值。该参数仅在支持 `TCP_KEEPIDLE`或者`TCP_KEEPALIVE`符号以及 Windows的系统上出现;在其它系统中,它必须是零。 在通过Unix域套接字连接的会话中,这个参数被忽略,并且总是读为零。 > **Note:** 在Windows中,0值将这个参数设置为2小时, 因为Windows不提供读取系统默认值的方法。 `tcp_keepalives_interval` (`integer`) 声明发送保持活跃信号的间隔秒数,不发送保持活跃信号,连接就会处于闲置状态。 零使用系统默认值。 在那些支持`TCP_KEEPINTVL`符号以及Windows的系统上支持这些参数。 在其他系统上,这个参数必须为零。 在通过Unix域套接字连接的会话中,这个参数被忽略,并且总是读为零。 > **Note:** 在Windows中,0值将这个参数设置为1秒, 因为Windows不提供读取系统默认值的方法。 `tcp_keepalives_count` (`integer`) 声明发送保持活跃信号的数量,不发送保持活跃信号,连接就会处于闲置状态。 零使用系统默认值。 在那些支持`TCP_KEEPCNT`的系统上支持这些参数。 在其他系统上,这个参数必须为零。 在通过Unix域套接字连接的会话中,这个选项被忽略,并且总是读为零。 > **Note:** 在Windows上不支持这个参数,并且总是为零。 ## 18.3.2\. 安全和认证 `authentication_timeout` (`integer`) 完成客户端认证的最长时间,以秒计。如果一个客户端没有在这段时间里完成认证协议, 服务器将中断连接。这样就避免了出问题的客户端无限制地占据连接资源。缺省是60秒(`1m`)。 这个选项只能在命令行上或者在`postgresql.conf`里设置。 `ssl` (`boolean`) 启用SSL连接。请在使用这个选项之前阅读[Section 17.9](#calibre_link-657)。 缺省是`off`。 这个选项只能在服务器启动的时候设置。SSL通讯与TCP/IP 连接是唯一可能的。 `ssl_ca_file` (`string`) 指定包含SSL服务器证书颁发机构(CA)的文件名称。 默认值为空,意味着没有CA文件被加载, 并且不进行客户端证书验证。 (在以前的PostgreSQL版本中,此文件的名称是作为`root.crt`的硬编码。) 相对路径是相对于数据目录。这个参数只能在服务器启动进行设置。 `ssl_cert_file` (`string`) 指定包含SSL服务器证书的文件名称。 默认值是`server.crt`。相对路径是 相对于数据目录。这个参数只能在服务器启动时进行设置。 `ssl_crl_file` (`string`) 指定包含SSL服务器证书撤销列表(CRL)的文件名称。 默认值为空,意味着没有CRL文件被加载。 (在PostgreSQL的早期版本中,该文件的名称为`root.crl`的 硬编码。)相对路径是相对于数据目录。这个参数只能在服务器启动时候进行设置。 `ssl_key_file` (`string`) 指定包含SSL服务器私钥的文件名称。 默认值是`server.key`。相对路径是 相对于数据目录。这个参数只能在服务器启动时设置。 `ssl_renegotiation_limit` (`integer`) 在会话密钥发生重新商议之前,指定多少数据可以进行SSL-加密。 当大量流量被检查的时候,但它也会产生大量性能损失,重新谈判降低攻击者密码分析的机会 。总的发送和接收的流量用于检查极限。如果该参数被设置为0, 禁用重新谈判。默认值是`512MB`。 > **Note:** 当使用SSL时再商议时候,2009年11月之前的SSL库是不安全的,由于SSL协议的一个漏洞。 作为这个漏洞修复,一些厂商出货的SSL库不能重新谈判。 如果在客户端或服务器上使用任何库,应禁用SSL重新协商。 `ssl_ciphers` (`string`) 指定SSL密码列表,在安全连接上允许使用。 参阅openssl手册页支持的密码列表。 `password_encryption` (`boolean`) 在[CREATE USER](#calibre_link-15)或者[ALTER ROLE](#calibre_link-17)里声明了一个口令, 而又没有写`ENCRYPTED`或者`UNENCRYPTED`的时候,这个选项决定口令是否要加密。 缺省是`on`(加密口令)。 `krb_server_keyfile` (`string`) 设置Kerberos服务器键字文件的位置。参阅[Section 19.3.5](#calibre_link-504)或者[Section 19.3.3](#calibre_link-505)获取细节。 这个参数只能在`postgresql.conf`文件或者服务器命令行中设置。 `krb_srvname` (`string`) 设置Kerberos服务名。参阅[Section 19.3.5](#calibre_link-504)获取细节。 这个参数只能在`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`一起使用。 > **Note:** 这个特性只是临时措施,直到找到一个完全的解决方案。那个时候,这个选项将被删除。