Postgresql配置文件
- 格式:doc
- 大小:42.50 KB
- 文档页数:10
相比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 用户名的映射,那么联接被接受。