连接和认证

PostgreSQL 9.4.4 中文手册
上一页 | 上一级 | 章 18. 服务器配置 | 下一页

# 18.3. 连接和认证

## 18.3.1. 连接设置

`listen_addresses` (`string`)

  声明服务器监听客户端连接的TCP/IP地址。值是一个逗号分隔的主机名和/或数字IP地址。 特殊项`*`对应所有可用IP接口。 `0.0.0.0`允许监听所有IPV4地址，并且`::`允许监听所有IPV6地址。 如果这个列表是空的，那么服务器不会监听任何IP接口， 这种情况下，只有Unix域套接字可以用于连接数据库。 缺省值localhost只允许进行本地"回环"连接。 客户端认证(第 19 章)允许细粒度控制谁能访问服务器， `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域套接字（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域套接字，只有写权限有意义， 因此在设置和撤销读和执行权限中没有任何意义。

  这个访问控制机制与第 19 章里描述的用户认证毫无关系。

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

  这个参数与系统无关，尤其是到了Solaris 10，完全忽略套接字权限。这里， 可以通过将`unix_socket_directories`指向一个将搜索权限限制为所需用户的路径来达到相似效果。 这个参数在Windows上也是无关紧要的，因为它不具有Unix域套接字。

`bonjour` (`boolean`)

  通过Bonjour启动广播服务器的存在。缺省是关闭的。 这个值只能在服务器启动的时候设置。

`bonjour_name` (`string`)

  声明Bonjour服务器名称。 空字符串`''`(缺省值)表示使用计算机名。 如果编译时没有打开Bonjour支持那么将忽略这个参数。 这个值只能在服务器启动的时候设置。

`tcp_keepalives_idle` (`integer`)

  声明TCP应该发送保持活跃信息到客户端后不活跃的秒数。 零使用系统默认值。该参数仅在支持 `TCP_KEEPIDLE`或者`TCP_KEEPALIVE`符号以及 Windows的系统上出现;在其它系统中，它必须是零。 在通过Unix域套接字连接的会话中，这个参数被忽略，并且总是读为零。

  > 注意: 在Windows中，0值将这个参数设置为2小时， 因为Windows不提供读取系统默认值的方法。

`tcp_keepalives_interval` (`integer`)

  声明TCP保持活跃信息不被客户端承认，应该被转发的秒数。 零使用系统默认值。 在那些支持`TCP_KEEPINTVL`符号以及Windows的系统上支持这些参数。 在其他系统上，这个参数必须为零。 在通过Unix域套接字连接的会话中，这个参数被忽略，并且总是读为零。

  > 注意: 在Windows中，0值将这个参数设置为1秒， 因为Windows不提供读取系统默认值的方法。

`tcp_keepalives_count` (`integer`)

  声明服务器到客户端的连接被认为关闭之前，TCP保持活跃信号可以丢失的数量。 零使用系统默认值。 在那些支持`TCP_KEEPCNT`的系统上支持这些参数。 在其他系统上，这个参数必须为零。 在通过Unix域套接字连接的会话中，这个选项被忽略，并且总是读为零。

  > 注意: 在Windows上不支持这个参数，并且总是为零。

## 18.3.2. 安全和认证

`authentication_timeout` (`integer`)

  完成客户端认证的最长时间，以秒计。如果一个客户端没有在这段时间里完成认证协议， 服务器将中断连接。这样就避免了出问题的客户端无限制地占据连接资源。缺省是60秒(`1m`)。 这个选项只能在命令行上或者在`postgresql.conf`里设置。

`ssl` (`boolean`)

  启用SSL连接。请在使用这个选项之前阅读第 17.9 节。 缺省是`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`。

  > 注意: 当使用SSL时再商议时候，2009年11月之前的SSL库是不安全的，由于SSL协议的一个漏洞。 作为这个漏洞修复，一些厂商出货的SSL库不能重新谈判。 如果在客户端或服务器上使用任何库，应禁用SSL重新协商。

`ssl_ciphers` (`string`)

  指定一列允许在安全连接上使用的SSL密码组。参阅OpenSSL 报中的ciphers手册页获取这个设置的语法， 和一系列支持的值。缺省值是`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` (`bool`)

  声明是否使用服务器的SSL预设密码，而不是客户端的。缺省是true。

  较老的PostgreSQL版本没有这个设置，并且总是使用客户端的预设。 这个设置主要是为了向后兼容。通常使用服务器的预设更好一些， 因为服务器更有可能适当的配置了。

`ssl_ecdh_curve` (`string`)

  声明在ECDH秘钥交换中要使用的curve的名字。 它需要所有连接客户端的支持。它不需要和服务器的Elliptic Curve秘钥相同。 缺省是`prime256v1`。

  大多数curve的OpenSSL名: `prime256v1` (NIST P-256)、 `secp384r1` (NIST P-384)、 `secp521r1` (NIST P-521)。

  使用命令`openssl ecparam -list_curves` 可以显示所有可用的curve的列表。并不是所有的curve都可以在 TLS中使用。

`password_encryption` (`boolean`)

  在CREATE USER或者ALTER ROLE里声明了一个口令， 而又没有写`ENCRYPTED`或者`UNENCRYPTED`的时候，这个选项决定口令是否要加密。 缺省是`on`(加密口令)。

`krb_server_keyfile` (`string`)

  设置Kerberos服务器键字文件的位置。参阅第 19.3.3 节获取细节。 这个参数只能在`postgresql.conf`文件或者服务器命令行中设置。

`krb_caseins_users` (`boolean`)

  设置GSSAPI用户名是否大小写无关。 缺省是`off`(大小写相关)。 这个参数只能在`postgresql.conf`文件或者服务器命令行中设置。

`db_user_namespace` (`boolean`)

  这个参数启动每个数据库的用户名。 缺省是关闭的。这个参数只能在命令行上或者在`postgresql.conf`里设置。

  如果打开这个选项，你应该像`username@dbname`这样创建用户。 在给一个正在连接的客户端传递`username`的时候，必须给用户名附加`@`和数据库名字， 然后服务器查找该数据库相关的用户名字。请注意，如果你在SQL环境里创建包含`@`的名字时， 你需要用引号包围用户名。

  打开这个选项之后，你还是能够创建普通的全局用户。 只要在客户端声明用户的时候附加一个`@`即可。比如`joe@`。 在服务器查找这个用户名之前，这个`@`会被剥除。

  `db_user_namespace`导致客户端和服务器端的用户名表示不同。 验证检查总是与该服务器的用户名一起进行， 所以验证方法必须配置为服务器的用户名，而不是客户端的。因为 `md5`在客户端和服务器上使用用户名， `md5`不能与`db_user_namespace`一起使用。

  > 注意: 这个特性只是临时措施，直到找到一个完全的解决方案。那个时候，这个选项将被删除。

上一页 | 起始页 | 下一页
文件位置 | 上一级 | 资源消耗