pgadmin给我报错:未提供密码

41

我在Linux(Kubuntu)上安装了PostgreSQL 9.2和最新版本的pgAdmin3,但是当我连接它们时出现以下错误:

发生错误: 无法连接到服务器:fe_sendauth:未提供密码

我该怎么办?

我还为我的Java Web应用程序配置了Tomcat。 实际上,在尝试应用程序之前,PostgreSQL 已经在工作。


5
我的密码是空的,所以当有请求时我只是按了回车键。 - DarkCoffee
1
你可以尝试从命令行连接吗? $ psql -U <username> -h <hostname> <dbname> 如果您想使用Unix域套接字连接,则可以省略-h <hostname>。 - Eelke
1
@Eelke 谢谢您的帮助,我通过更改pg_hba.conf文件解决了这个问题。 - DarkCoffee
5个回答

38

更改角色postgres的密码:

sudo -u postgres psql postgres

alter user postgres with password 'postgres';

尝试使用用户名和密码均为“postgres”进行连接。

请参考:如何更改PostgreSQL用户密码


1
非常感谢 @Paschal。 - Mo1

16
"是否需要密码取决于您在pg_hba.conf中的设置。并且有不同的连接方式 - pg_hba.conf中的不同设置可能适用。

我引用了pgAdmin 3中“主机”字段(“服务器”)设置的帮助:

主机是要联系的计算机的IP地址或完全限定域名。在基于Unix的系统上,地址字段可以留空以使用本地计算机上的默认PostgreSQL Unix域套接字,或设置为包含PostgreSQL套接字的备用路径。如果输入了路径,则必须以“/”开头。也可以指定端口号。

如果通过Unix套接字连接,则适用“local”的规则。 而当通过TCP/IP连接时,适用“host”(或“hostssl”)规则。

如果您在pg_hba.conf文件的顶部有这样一行:

"
local    all     all     peer

或者:

local    all     all     ident

如果您的系统用户和数据库用户都是“postgres”,那么您可以在本地连接时无需密码。


2
我改成了以下内容:<br/>

“local” 只适用于 Unix 域套接字连接 <br/>

local all all peer

IPv4 本地连接:

host all all 127.0.0.1/32 trust <br/>

IPv6 本地连接:

host all all ::1/128 trust <br/> 现在它可以工作了!谢谢!
- DarkCoffee
@DarkCoffee:我想你应该知道,“trust”设置是不安全的。 - Erwin Brandstetter
在版本3上可能是这样的,但在pgAdmin 4上,主机名/地址字段不能为空;否则会生成错误。 - cazort

10

我知道这个问题已经有多年了,但今天我遇到了同样的问题,并且有一个使用trust的解决方案,虽然它非常有限但也很有用。

就像在许多开发商店中一样,当开发人员需要QA postgres密码时,他们会大喊大叫、发送信息、发送电子邮件、在额头上写下密码等等。而我想:「这真的很糟糕。我需要找出一种在这里使用PKI的方法。」我们还使用pgAdmin3.

首先,在您的pg_hba.conf文件中添加像这样的行,其中dev表示您商店中的开发人员用户:

host all dev 127.0.0.1/32 trust

将开发人员的公钥放入数据库服务器上的其授权密钥文件夹中。现在让他们使用类似以下命令的-L标志ssh进入服务器:

ssh -i ~/.ssh/id_rsa -L5432:127.0.0.1:5432 -vvv 101.102.103.104

这允许您使用postgres端口,就好像它是localhost一样。当然,要替换密钥、服务器并确保映射到本地的开放端口(如果您有本地运行的postgres,则可能绑定到5432)。我使用了一个非常详细的标志,以便可以轻松地解决任何ssh问题。

打开另一个终端并执行此命令:

psql -h 127.0.0.1 -U dev -p 5432

您应该可以访问数据库而且不需要输入密码,这很棒,因为否则开发人员将会毫不在乎地传递密码,像万圣节糖果一样。

截至目前,尽管您无需密码,但PgAdmin3仍将提示您输入密码。但是其他postgres GUI不会,试试Postico吧。它还在测试版,但运作良好。

我希望这个答案能够帮助像我一样更愿意使用PKI来进行Postgres认证而不是随意共享密码的人。


日志文件为我提供了额外的信息,即 pg_hba.conf 中的规则是按顺序处理的。我不得不将我的规则移到更广泛的规则之上,以便其生效。谢谢! - Christian

1

最近遇到了这个问题。

如果您在本地机器上使用PostgreSQL,并且psql可以正常工作而无需登录,则尝试使用pgadmin3的菜单文件-添加服务器-属性选项卡,为此连接填写名称字段,将主机字段和密码字段留空,然后单击确定

来自pgadmin文档

在基于Unix的系统上,地址字段可以留空以使用本地机器上的默认PostgreSQL Unix域套接字,或设置为包含PostgreSQL套接字的备用路径。 如果输入路径,则必须以“/”开头。

在Debian测试版(pgadmin3 1.22,PostgreSQL 11)上运行,无需触及pg_hba.conf


0
对于我来说,我运行pg_ctl -D /usr/local/var/postgres start,启动服务器,然后一切正常,连接主机端口就会弹出。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接