缺省的时候,客户端只能通过一个本地的 Unix 套接字联接到数据库服务器上来,而不是通过 TCP/IP 套接字。后端必须带 -i 选项启动才能允许非本地的客户端联接上来。
可以通过在 PG_DATA 里的 pg_hba.conf 文件来限制可联接的客户端 IP 地址和/或用户名。
客户端联接可以通过其他外部软件包来认证。
Postgres 里的每个用户都赋予了一个用户名和一个(可选的)口令。缺省是,用户对不是他们创建的数据库没有写权限。
用户可以赋予组,而且表的访问权限可以以组权限为基础设置。
每个数据库系统都包含一个文件叫 pg_hba.conf,在其 PGDATA 目录里,该文件控制谁可以联接到各自的数据库。
每个正在访问数据库的客户端必须被 pg_hba.conf 里的其中一条记录涵盖。否则所有从那个客户端发送上来的联接请求都将被拒绝,错误信息为 "User authentication failed" (用户认证失败)。
文件 pg_hba.conf 的常用格式是一套记录,每行一条。空白行或者杂乱符号("#")开头的行被忽略。一条记录是由若干用空格和/或 tab 分隔的字段组成。
从客户端来的联接可以使用 Unix 域套接字或者网际网域套接字(例如:TCP/IP)建立。用 Unix 域套接字进行的联接是用下面格式的记录进行控制的:
local database authentication method这里
| database 声明记录所应用的数据库。值 all 表明该记录应用于所有数据库。 |
| authentication method 声明一个用户在用 Unix 域套接字与该数据库联接时用于认证他们自身的方法。不同的方法在下面描述。 |
用网际网(IP)域套接字进行的联接是用下面格式的记录进行控制的:
host database TCP/IP address TCP/IP mask authentication methodTCP/IP address 逻辑上与声明的 TCP/IP mask 和正在联接的客户端的 TCP/IP 地址分别相加。如果两个结果相等则该记录用于这次联接。如果一个联接匹配多于一条记录,那么使用文件里第一条匹配的记录。 TCP/IP address 和 TCP/IP mask 都是用点分十进制符号表示的。
如果一个联接不能和任何记录相匹配,则应用拒绝认证方法(见下文)。
# Trust any connection via Unix domain sockets. local trust # Trust any connection via TCP/IP from this machine. host all 127.0.0.1 255.255.255.255 trust # We don't like this machine. host all 192.168.0.10 255.255.255.0 reject # This machine can't encrypt so we ask for passwords in clear. host all 192.168.0.3 255.255.255.0 password # The rest of this group of machines should provide encrypted passwords. host all 192.168.0.0 255.255.255.0 crypt