3.3.?连接和认证

3.3.1. 连接设置
3.3.2. 安全和认证

3.3.1.?连接设置

listen_addresses (string)

指定服务器在哪些TCP/IP地址上监听客户端连接。值的形式是一个逗号分隔的主机名和/或数字IP地址列表。特殊项*对应所有可用IP接口。项0.0.0.0允许监听所有IPv4地址并且::允许监听所有IPv6 地址。如果列表为空,服务器将根本不会监听任何IP接口,在这种情况中只能使用Unix域套接字来连接它。默认值是localhost,它只允许建立本地TCP/IP回环连接。虽然客户端认证(第?4?章)允许细粒度地控制谁能访问服务器,listen_addresses控制哪些接口接受连接尝试,这能帮助在不安全网络接口上阻止重复的恶意连接请求。这个参数只能在服务器启动时设置。

port (integer)

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

max_connections (integer)

决定数据库的最大并发连接数。默认值通常是100个连接,但是如果内核设置不支持(initdb时决定),可能会比这个数少。这个参数只能在服务器启动时设置。

当运行一个备用服务器时,你必须设置这个参数等于或大于主服务器上的参数。否则,备用服务器上可能无法允许查询。

superuser_reserved_connections (integer)

决定为UXDB超级用户连接而保留的连接数。 同时活跃的并发连接最多max_connections个。任何时候,活跃的并发连接数最多为max_connections减去 superuser_reserved_connections,新连接就只能由超级用户发起了,并且不会有新的复制连接被接受。

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

unix_socket_directories (string)

指定服务器用于监听来自客户端应用的连接的Unix域套接字目录。通过列出用逗号分隔的多个目录可以建立多个套接字。项之间的空白被忽略,如果你需要在名称中包括空白或逗号,在目录名周围放上双引号。一个空值指定在任何Unix域套接字上都不监听,在这种情况中只能使用TCP/IP套接字来连接到服务器。默认值通常是/tmp,但是在编译时可以被改变。这个参数只能在服务器启动时设置。

除了套接字文件本身(名为.s.UXSQL.nnnn,其中nnnn是服务器的端口号),一个名为.s.UXSQL.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域套接字,只有写权限有麻烦,因此没有对读取和执行权限的设置和收回)。

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

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

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

3.3.2.?安全和认证

authentication_timeout (integer)

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

ssl (boolean)

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

ssl_ca_file (string)

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

ssl_cert_file (string)

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

ssl_crl_file (string)

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

相对路径是相对于数据目录。这个参数只能在服务器启动时设置。

ssl_key_file (string)

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

ssl_ciphers (string)

指定一个SSL密码列表,用于安全连接。这个参数只能在uxsinodb.conf文件中或服务器命令行上设置。默认值是HIGH:MEDIUM:+3DES:!aNULL。默认值通常是合理的选择,除非你有特别的安全性需求。

默认值的解释:

HIGH

使用来自HIGH组的密码的密码组(例如 AES, Camellia, 3DES)

MEDIUM

使用来自MEDIUM组的密码的密码组(例如 RC4, SEED)

+3DES

OpenSSL对HIGH的默认排序是有问题的,因为它认为3DES比AES128更高。这是错误的,因为3DES提供的安全性比AES128低,并且它也更加慢。 +3DES把它重新排序在所有其他HIGHMEDIUM密码之后。

!aNULL

禁用不做认证的匿名密码组。这类密码组容易收到中间人攻击,因此不应被使用。

可用的密码组细节可能会随着OpenSSL版本变化。可使用命令openssl ciphers -v 'HIGH:MEDIUM:+3DES:!aNULL'来查看当前安装的OpenSSL版本的实际细节。注意这个列表是根据服务器密钥类型在运行时过滤过的。

ssl_prefer_server_ciphers (boolean)

指定是否使用服务器的SSL密码首选项,而不是用客户端的。 这个参数只能在uxsinodb.conf文件中或服务器命令行上设置。 默认是on

使用服务器的首选项通常会更好,因为服务器更可能会被合适地配置。

ssl_ecdh_curve (string)

指定用在ECDH密钥交换中的曲线名称。它需要被所有连接的客户端支持。 它不需要与服务器椭圆曲线密钥使用的曲线相同。这个参数只能在uxsinodb.conf文件或服务器命令行上设置。默认值是prime256v1

OpenSSL命名了最常见的曲线: prime256v1 (NIST P-256)、 secp384r1 (NIST P-384)、 secp521r1 (NIST P-521)。 openssl ecparam -list_curves命令可以显示可用曲线的完整列表。不过并不是所有的都在TLS中可用。

password_encryption (enum)

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

有关更多详细信息,请参阅第?4.3.2?节

ssl_dh_params_file (string)

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

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

krb_server_keyfile (string)

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

krb_caseins_users (boolean)

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

db_user_namespace (boolean)

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

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

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

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

注意

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

XML 地图 | Sitemap 地图