18.3. 连接和认证

18.3.1. 连接设置

listen_addresses(string)

声明服务器监听客户端连接的TCP/IP地址。值是一个逗号分隔的主机名 和/或数字 IP 地址。特殊项*对应所有可用 IP 接口。 如果这个列表是空的,那么服务器不会监听任何 IP 接口, 这种情况下,只有 Unix 域套接字可以用于连接数据库。 缺省值localhost只允许 本地TCP/IP "loopback"连接。客户端身份认证(Chapter 19) 细粒度控制谁可以连接服务器,listen_addresses控制哪个接口接受连接请求, 这个可以阻止重复不安全的网络接口上的恶意连接请求。只有在服务器启动时可以设置这个参数。

port(integer)

服务器监听的 TCP 端口;缺省是 5432 。请注意同一个端口号用于服务器监听 的所有 IP 地址。这个参数只能在服务器启动的时候设置。

max_connections(integer)

允许和数据库连接的最大并发连接数。缺省通常是 100 ,但是如果内核 设置不支持这么大(在initdb的时候判断),可能会比这个 数少。这个参数只能在服务器启动的时候设置。

增大这个参数可能导致PostgreSQL要求更多的 System V共享内存或者信号灯, 可能超过操作系统缺省配置的许可值。必要的话,参阅Section 17.4.1获取有关如何调节这个参数的信息。

当运行备服务器时,这个参数必须等于或大于主服务器上的参数,否则,备服务器上可能无法进行查询操作。

superuser_reserved_connections (integer)

决定为PostgreSQL超级用户连接而保留的连接 一次最多可以同时激活max_connections个连接。 在活跃的并发连数接到了max_connections减去 superuser_reserved_connections的时候, 新的连接就只能由超级用户发起了,并没有新的复制连接将被接受。

缺省值是 3 。这个值必须小于max_connections的值。 这个参数只能在服务器启动的时候设置。

unix_socket_directory(string)

声明服务器监听客户端连接的 Unix 域套接字目录。缺省通常是 /tmp,但是可以在编译的时候修改。这个值只能在 服务器启动的时候设置。

除了套接字文件本身,名为.s.PGSQL.nnnn.s.PGSQL.nnnn.locknnnn是服务器的端口号) 的文件会在unix_socket_directory路径下创建,这两个文件都不应被手动删除。

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

unix_socket_group(string)

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

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

unix_socket_permissions(integer)

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

缺省的权限是0777,意思是任何人都可以连接。 合理的候选是0770(只有用户和同组的人可以访问, 又见unix_socket_group)和0700 (只有用户自己可以访问)。请注意,对于 Unix 域套接字,只有写权限有意义,读和执行权限没有任何意义。

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

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

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

bonjour(boolean)

缺省值是off,这个参数只能在服务器启动的时候设置。

bonjour_name(string)

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

tcp_keepalives_idle(integer)

另一个空闲例程连接中,在发送一个keepalive报文之前指定秒数。 若指定0,即缺省值。这个参数只有在支持TCP_KEEPIDLETCP_KEEPALIVE标签 的系统或windows上才可以使用,在其他系统上,必须为0。通过Unix域套接字连接时忽略该参数。

Note: Windows系统上,值若为0,系统会将该参数设置为2小时, 因为Windows不支持读取系统默认值。

tcp_keepalives_interval(integer)

另一个空闲例程连接中,在发送一个keepalive报文过程中指定秒数。 若指定0,即缺省值。这个参数只有在支持TCP_KEEPINTVL标签 的系统或windows上才可以使用,在其他系统上,必须为0。通过Unix域套接字连接时忽略该参数。

Note: Windows系统上,值若为0,系统会将该参数设置为1秒, 因为Windows不支持读取系统默认值。

tcp_keepalives_count(integer)

在另一个空闲连接例程上,声明要发送的keepalive报文数。 若指定0,则是系统默认。这个参数只有在支持TCP_KEEPINTVL标签 的系统才可以使用,在其他系统上,必须为0。通过Unix域套接字连接时忽略该参数。

Note: Windows不支持该参数,且必须为0.

18.3.2. 安全性和身份验证

authentication_timeout(integer)

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

ssl(boolean)

启用SSL连接。请在使用这个选项之前阅读Section 17.8。缺省是off。 这个选项只能在服务器启动的时候设置。SSL通信是唯一可以与TCP/IP的连接。

ssl_renegotiation_limit(integer)

在会话密钥被重新审核之前,声明多少数据可通过一个SSL密钥连接。 重新审核可以减低黑客进行密码分析攻击的机会,但同样会造成较大的性能损失。 发送和接受的传输数用于进行限制检查。如果参数设置为0,则禁用重新审核。默认是512MB

Note: 在进行SSL重新审核时,2009年11月之前的SSL库是不安全的,因为SSL中存在协议漏洞。 由于修复这个漏洞很麻烦,因此一些厂商会禁止SSL重新审核的功能。

ssl_ciphers(string)

声明一个SSL密钥列表,用于安全连接。可从openssl手册页中产看支持的密钥列表。 只有服务器支持SSL才可以使用该参数。

password_encryption(boolean)

在 inCREATE USERALTER USER 里声明了一个口令,而又没有写ENCRYPTEDUNENCRYPTED的时候,这个选项决定口令是否要加密。 缺省是on(加密口令)。

krb_server_keyfile(string)

设置 Kerberos 服务器键字文件的位置。参阅Section 19.3.5 或者Section 19.3.3获取细节。这个选项只能在 postgresql.conf文件或命令行上进行设置

krb_srvname(string)

设置 Kerberos 服务名。参阅节Section 19.3.5获取细节。 这个值只能在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不能同db_user_namespace一起用。

Note: 这个特性只是临时试验用途,直到找到一个完全的解决方案。那个时候, 这个选项将被删除。