一、正确的方式连接到了正确的数据库
如果想知道是否以正确的方式连接到了正确的数据库,我们可以执行下面给出的命令加以验证:
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证书进行认证
错误2:
psql: could not connect to server: Connection refused (0x0000274D/10061)
Is the server running on host "???" and accepting
TCP/IP connections on port 5432?
这个问题一般是以下原因造成的: www.111com.net
1.服务器没起来,ps -ef|grep postgres查看是否存在PG进程
2.监听问题,cat postgresql.conf|grep listen 查看监听地址是否正确
3.以上都没问题,服务器端能连进去,但客户端不行,这时需要查看pg_hba.conf文件
4.以上都没问题,检查服务器端的iptables,开启防火墙的访问端口
错误3:
是在群里一个用户贴的:
Fatal:connection limit exceeded for non-supersers
其实该问题和错误1是类似的,连接数接近数据库设置的连接数.需要增大连接数 说明:
max_connections是数据库允许的最大连接数,默认值100,
superuser_reserved_connections是预留给超级用户的连接数,默认值3
修改这两个参数都需要重启DB;
与之相关联的参数还有work_mem,连接数*work_mem可以得到DB的内存大小,这个调整视服务器的内存大小
远程连接PostgreSQL
A: 192.168.1.1 Windows Server 2003
B: 192.168.1.2 Windows XP pro
A机器安装PostgreSQL,默认端口5432
想实现B机器通过远程连接A机器的PostgreSQL服务。
如果A机器启动Windows防火墙,则在“例外”中“添加端口”加上5432端口。
在postgresql.conf中的修改
listen_addresses = '*'
port = 5432
在pg_hba.conf中添加
host all all 192.168.1.2/32 trust
在B机器上用pgAdminIII试试连接A机器192.168.1.1