3

我正在尝试在我的计算机上连接到只能在某些服务器上访问的 PostgreSQL 数据库(db 只允许本地连接)。我想我可以像这样使用端口转发:

$ ssh someserver.com -L 5100:127.0.0.1:5432

然后像这样连接到数据库:

$ psql -h 127.0.0.1 -p 5100 -U postgres dbname

但是,问题是服务器上没有密码,但是当我尝试连接到转发端口时,它会要求我输入密码。当我将其留空时,它会返回“psql:fe_sendauth:未提供密码”并且不允许我连接。

可能是什么原因?我的计算机上还有一个 PostgreSQL 实例,这会导致一些冲突吗?

4

1 回答 1

9

当您说 db 只允许本地连接时:您需要区分“unix socket”连接和“TCP to localhost”连接,它们不是一回事,可能会被完全不同地对待。

测试:在数据库服务器上,查看添加-h 127.0.0.1到 psql 命令行是否会影响您是否可以连接。

是否需要密码的规则在pg_hba.conf. 可能是您的数据库服务器设置为对 unix(“本地”)连接使用“ident”身份验证,因此您的 Unix 用户名被自动接受为数据库用户名。由于该身份验证方法通常不适用于 TCP/IP(“主机”)连接,因此您必须使用其他方法 - 如果将其设置为“md5”,则需要密码。

可能您所要做的就是在本地连接时为数据库上的用户帐户设置密码:ALTER USER username PASSWORD 'password'. 如果您想避免在远程连接时一直提示输入密码,请编写一个.pgpass文件将其存储在您的客户端用户帐户中:http ://www.postgresql.org/docs/9.0/interactive/libpq-pgpass.html

于 2010-12-24T11:19:09.573 回答