Postgresql配置文件

  • 格式:doc
  • 大小:42.50 KB
  • 文档页数:10

下载文档原格式

  / 21
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

相比mysql单一的f,postgresql的访问认证配置主要涉及到两个主要的配置文件:postgresql.conf和pg_hba.conf,本文从安全设置角度讲述这两个配置文件的配置选项。部分文字、样例摘抄自postgresql的中文手册。

postgresql.conf

postgresql.conf包含了许多的选项,这些选项控制了postgresql.conf的方方面面,中间影响访问认证的选项是:

unix_socket_group

设置Unix 域套接字的组所有人,(套接字的所有权用户总是启动postmaster 的用户)与UNIX_SOCKET_PERMISSIONS 选项一起使用可以给这种套接字类型增加额外的访问控制机制,缺省时是一个空字串,也就是使用当前用户的缺省的组,这个选项只能在服务器启动时设置。

unix_socket_permissions

给Unix 域套接字设置访问权限,Unix 域套接字使用通常的Unix 文件系统权限集。可选的值可以是一个chmod 和umask 系统调用可以接受的数字模式。(要使用客户化的八进制格式,该数字必须以0 (零)开头)

缺省权限是0777,意即任何人都可以联接,合理的选则可能是0770 (只有用户和组,参阅UNIX_SOCKET_GROUP)和0700 (只有用户)。(请注意对于Unix 套接字而言,实际上只有写权限有意义,而且也没有办法设置或者取消读或执行权限)

这个选项只能在服务器启动时设置。

pg_hba.conf是设置访问认证的主要文件,格式为每条记录一行,每行指定一条访问认证。设定一条访问认证包含了7个部分:连接方式(type)、数据库(database)、用户名(user)、ip地址(ip-address)、子网掩码(ip-mask)、认证方法(authentication method)、认证配置(authentication-option),以下是这7个部分的详细说明:

连接方式(type)

连接方式共有三种:local、host、hostssl

local

这条记录匹配通过Unix 域套接字进行的联接企图,没有这种类型的记录,就不允许Unix 域套接字的联接。

host

这条记录匹配通过TCP/IP 网络进行的联接尝试,请注意,除非服务器是带着-i 选项或者打开了postgresql.conf 里面的tcpip_socket 配置参数集启动的,否则TCP/IP 联接是被禁止掉的。

hostssl

这条记录匹配通过在TCP/IP 上进行的SSL 联接企图,host 记录可以匹配SSL 和非SSL 的联接企图,但hostssl 记录需要SSL 联接。

数据库(database)

声明记录所匹配的数据库。值all 表明该记录匹配所有数据库,值sameuser表示如果被请求的数据库和请求的用户同名,则匹配。samegroup 表示请求的用户必须是一个与数据库同名的组中的成员。在其他情况里,这就是一个特定的PostgreSQL 的名字。我们可以通过用逗号分隔的方法声明多个数据库。一个包含数据库名的文件可以通过对该文件前缀@ 来声明.该文件必需和pg_hba.conf 在同一个目录。

用户名(user)

为这条记录声明所匹配的PostgreSQL 用户,值all 表明它匹配于所有用户。否则,它就是特定PostgreSQL 用户的名字,多个用户名可以通过用逗号分隔的方法声明,组名字可以通过用+ 做组名字前缀来声明。一个包含用户名的文件可以通过在文件名前面前缀@ 来声明,该文件必需和pg_hba.conf 在同一个目录。

ip地址(ip-address)

子网掩码(ip-mask)

这两个字段包含标准的点分十进制表示的IP地址/掩码值。(IP地址只能用数字的方式声明,而不能用域名或者主机名)它们俩放在一起,声明了这条记录匹配的客户机的IP 地址。准确的逻辑是:

(actual-IP-address xor IP-address-field) and IP-mask-field

对于要匹配的记录必需为零。

如果连接方式是host或者hostssl的话,这两项必须指定,否则可以不填。

认证方法(authentication method)

trust

无条件地允许联接,这个方法允许任何可以与PostgreSQL 数据库联接的用户以他们期

望的任意PostgreSQL 数据库用户身份进行联接,而不需要口令。

reject

联接无条件拒绝,常用于从一个组中"过滤"某些主机。

md5

要求客户端提供一个MD5 加密的口令进行认证,这个方法是允许加密口令存储在pg_shadow里的唯一的一个方法。

crypt

类似md5 方法,只是用的是老式的crypt 加密认证,用于7.2 以前的客户端,对于7.2 以及以后的客户端,我们建议使用md5。

password

和"md5"一样,但是口令是以明文形式在网络上传递的,我们不应该在不安全的网络上使用这个方式。

krb4

用Kerberos V4 认证用户,只有在进行TCP/IP 联接的时候才能用。(译注:Kerberos,"克尔波洛斯",故希腊神话冥王哈得斯的多头看门狗,FF8中“反击的狼烟”。Kerberos 是MIT 开发出来的基与对称加密算法的认证协议和/或密钥交换方法,其特点是需要两个不同用途的服务器,一个用于认证身份,一个用于通道两端用户的密钥交换。同时Kerberos 对网络时间同步要求比较高,以防止回放攻击,因此通常伴随NTP 服务。)

krb5

用Kerberos V5 认证用户.只有在进行TCP/IP 联接的时候才能用。(译注:Kerberos V5 是上面V4 的改良,主要是不再依赖DES 算法,同时增加了一些新特性。)

ident

获取客户的操作系统名(对于TCP/IP 联接,用户的身份是通过与运行在客户端上的ident 服务器联接进行判断的,对于本地联接,它是从操作系统获取的。)然后检查一下,看看用户是否允许以要求的数据库用户进行联接,方法是参照在ident 关键字后面声明的映射。

如果你使用了sameuser 映射,那么假设用户名是相等的。如果没有声明这个关键字,则在$PGDATA/pg_ident.conf 文件中找出映射名。如果这个文件里包含一条记录标识着ident提供的用户名和请求的PostgreSQL 用户名的映射,那么联接被接受。