18.3. 连接和认证
18.3.1. 连接设置
listen_addresses
(string
)
声明服务器监听客户端连接的TCP/IP地址。值是一个逗号分隔的主机名和/或数字IP地址。 特殊项*
对应所有可用IP接口。 0.0.0.0
允许监听所有IPV4地址,并且::
允许监听所有IPV6地址。 如果这个列表是空的,那么服务器不会监听任何IP接口, 这种情况下,只有Unix域套接字可以用于连接数据库。 缺省值localhost只允许进行本地"回环"连接。 客户端认证(Chapter 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域套接字,只有写权限有意义, 因此在设置和撤销读和执行权限中没有任何意义。
这个访问控制机制与Chapter 19里描述的用户认证毫无关系。
这个参数只能在服务器启动的时候设置。
这个参数在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。 缺省是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或者ALTER ROLE里声明了一个口令, 而又没有写ENCRYPTED
或者UNENCRYPTED
的时候,这个选项决定口令是否要加密。 缺省是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
在客户端和服务器上使用用户名, md5
不能与db_user_namespace
一起使用。
Note: 这个特性只是临时措施,直到找到一个完全的解决方案。那个时候,这个选项将被删除。