一、正确的方式连接到了正确的数据库
如果想知道是否以正确的方式连接到了正确的数据库,我们可以执行下面给出的命令加以验证:
SELECT inet_server_port(); 该命令显示服务器所侦听的端口号。
SELECT current_database(); 显示当前的数据库。
SELECT current_user; 该命令显示当前的userid。
SELECT inet_server_addr(); 显示接受连接的服务器的IP地址。
很明显,用户的口令是无法以普通SQL进行访问的。
二、远程访问数据库
为安全起见,PostgreSQL的许多版本 默认时禁用了其远程访问功能。那么,如何启用该功能呢?
为了启用网络或者远程访问功能,我们需要在postgresql.conf文件中添加或者编辑下列内容:
listen_addresses = '*'
在pg_hba.conf的第一行添加如下内容,以便允许所有用户通过加密口令来访问所有数据库:
# TYPE DATABASE USER CIDR-ADDRESS METHOD
host all all 0.0.0.0/0 md5
下面我们对上面的内容做简单说明。参数listen_addresses指定了要侦听的IP地址。这样的话,即使每个系统上有多个网卡也没关系了。在大多数情况下,我们会接受所有网卡上的连接,所以可以使用“*”,它表示所有IP地址。
pg_hba.conf中存放有一组基于主机的认证规则。每条规则会被逐条应用,直到找到一条符合的,就能通过认证;或者访问被reject方法显式拒绝。上面的示例中给出的规则表示,所有远程连接,无论用户为谁,无论访问那个数据库,也无论来自哪个IP地址,都要求通过md5加密的口令进行认证。
Type = host表示远程连接。Database = all 表示所有数据库。其他名字要求严格匹配,除非带有前缀+,这个前缀表示组角色,而非某个用户。我们还可以规定一个由逗号分隔的用户表,或者使用@ symbol 来包含一个存放用户表的文件。我们还可以使用sameuser,这样的话只有当用户名和数据库名称一致时才匹配。
User = all 表示所有用户。其他名字要求严格匹配,除非带有前缀+,这个前缀表示组角色,而非某个用户。我们还可以规定一个由逗号分隔的用户表,或者使用@ symbol来包含一个存放用户表的文件。
CIDR-ADDRESS 由两部分组成,即IP地址/子网掩码。子网掩码规定了IP地址中前面哪些位表示网络编号。这里/0表示IP地址中没有表示网络编号的位,这样的话全部的IP地址都匹配,例如192.168.0.0/24表示匹配前24位,所以它匹配任何192.168.0.x形式的IP地址。我们还可以使用samenet或者samehost。
这里一定要注意,千万不要使用password设置,这样会允许明文形式的口令。
Method = trust 实际上表示无需认证。其他的认证方法包括GSSAPI、SSPI、LDAP、RADIUS和PAM。此外,我们还可以使用SSL连接PostgreSQL,这时用客户端的SSL证书进行认证。