59

我尝试使用我的 Windows 机器上的 postgres 用户使用 Pgadmin 登录到我的服务器。

但它一直给我这个错误:

psql: FATAL:  password authentication failed for user "postgres"

然后我尝试使用 psql 从命令行登录,这给了我同样的错误。然后,在将 pg_hba.conf 中的本地条目放入信任之后,我使用 psql 将密码重置为“test”。然后我将条目放回 md5,并尝试使用密码“test”登录。

在 psql 中,我使用了以下命令:

ALTER ROLE postgres WITH PASSWORD 'test';
ALTER ROLE postgres PASSWORD 'test';
ALTER USER postgres WITH PASSWORD 'test';
ALTER USER postgres PASSWORD 'test';

还有这个特殊的 psql 命令

\password

每次,我将 pg_hba.conf 本地条目返回给 md5,并尝试使用 psql 登录:

psql -U postgres

然后我被要求输入密码。输入“test”后,psql 给出了与我之前提到的相同的错误。

当然,我在每次更改 pg_hba 文件后都重新启动了 postgresql。我正在使用带有'su postgres'的psql。

因此,即使我能够以通常的方式更改密码,它也不会被接受为密码。

我希望有人能够帮助我解决这个问题。

一些信息:

Postgresql 9.1 Ubuntu 12.04

Pg_hba 文件(根据要求)

local   all             postgres                                md5

local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5

host    all             all             <my-ip-address>/32        md5

想修改密码的时候,把上面的md5改成trust。我想提一下,这个配置以前没有问题。

结果

sudo -u postgres psql -x -c "select * from pg_user where usename='postgres'"

是:

usename     | postgres
usesysid    | 10
usecreatedb | t
usesuper    | t
usecatupd   | t
userepl     | t
passwd      | ********
valuntil    | 1970-01-01 00:00:00+01
useconfig   |
4

5 回答 5

79

如最新编辑所示,密码有效期至 1970 年,这意味着它目前无效。这解释了与密码错误相同的错误消息。

使用以下命令重置有效性:

ALTER USER postgres VALID UNTIL 'infinity';

在最近的一个问题中,另一位用户对用户帐户和 PG-9.2 有同样的问题:

PostgreSQL - 添加组角色后密码验证失败

因此,显然有一种方法可以无意中为 Unix 纪元(1970 年 1 月 1 日,该abstime类型的最小可能值)设置虚假密码有效性。可能是 PG 本身或某些客户端工具中存在会造成这种情况的错误。

编辑:原来是一个 pgadmin 错误。请参阅https://dba.stackexchange.com/questions/36137/

于 2013-01-28T16:13:28.180 回答
11

我遇到了这个问题,这里的答案对我不起作用;我无法弄清楚为什么我无法登录并收到上述错误。

事实证明,postgresql 将用户名保存为小写,但在身份验证期间它同时使用大写和小写。

CREATE USER myNewUser WITH PASSWORD 'passWord';

将使用用户名“mynewuser”和密码“passWord”创建一个用户。

这意味着您必须使用“mynewuser”而不是“myNewUser”进行身份验证。对于像我这样的 pgsql 新手来说,这很令人困惑。我希望它可以帮助遇到这个问题的其他人。

于 2016-12-29T08:59:04.557 回答
10

pg_hba.conf条目通过 IP 地址定义登录方法。您需要显示的相关部分pg_hba.conf才能获得适当的帮助。

更改此行:

host    all             all             <my-ip-address>/32        md5

反映您的本地网络设置。因此,如果您的 IP 是192.168.16.78(C 类),掩码为255.255.255.0,则输入:

host    all             all             192.168.16.0/24        md5

确保您的 WINDOWS 机器在该网络中,192.168.16.0然后重试。

于 2013-01-28T15:00:43.557 回答
1

假设您在盒子上具有 root 访问权限,您可以执行以下操作:

sudo -u postgres psql

如果数据库“postgres”失败,则此块不存在。

sudo -u postgres psql template1

然后 sudo nano /etc/postgresql/11/main/pg_hba.conf 文件

local   all         postgres                          ident

对于较新版本的 PostgreSQL,ident 实际上可能是对等的。

在 psql shell 中,您可以给 DB 用户 postgres 一个密码:

ALTER USER postgres PASSWORD 'newPassword';
于 2019-04-24T08:15:16.077 回答
0

我在 Windows 机器上遇到了同样的问题

实际上,我为另一个用户遇到了同样的错误,但问题是我的机器上安装了 Postgres 数据库,对于我正在处理的这个特定项目,我正在尝试在 docker 上使用 Postgres 图像,所以当我想运行项目我得到这个错误。最后,我发现问题在于 Postgres 服务已启动并正在运行,所以首先我必须终止它services.msc,然后运行项目,以便它使用 Postgres 图像。

于 2022-02-25T17:17:04.317 回答