如何设置postgresql访问认证设置Linux认证考试
文章作者 100test 发表时间 2009:10:22 22:00:49
来源 100Test.Com百考试题网
安装postgresql是一件很简单的事,但是当我第一次安装了postgresql以后,它的安全设置曾经让我困扰过一阵,现在我将以我的经历为线索来讲述如何配置postgresql的访问认证,postgresql的版本是7.3.1,老一点的版本在配置文件上会有稍许不同,请自己注意区别。另外,在阅读中,请注意区分数据库用户和系统用户的区别,以免混淆。
postgresql的访问认证配置主要涉及到两个主要的配置文件:postgresql.conf和pg_hba.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的话,这两项必须指定,否则可以不填。