【问题标题】:Postgres password authentication failsPostgres 密码认证失败
【发布时间】:2013-01-11 22:41:32
【问题描述】:

我尝试使用 postgres 用户从我的 windows 机器上使用 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   |

【问题讨论】:

  • 能否添加结果:sudo -u postgres psql -x -c "select * from pg_user where usename='postgres'"(查看密码有效性信息)

标签: postgresql


【解决方案1】:

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 中,然后重试。

【讨论】:

  • 我已经添加了 pg_hba.conf 文件。这几乎是默认设置,加上我的 IP 地址。
  • 糟糕。我把192.168.16.0/0 放在了应该是192.168.16.0/24 的地方。刚刚编辑了答案来纠正这个问题。
  • 我应该补充一点,我的服务器不在本地网络中。此外,当我在运行 Postgresql 的同一台机器上使用 psql 时也会出现问题。
【解决方案2】:

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

重置有效期:

ALTER USER postgres VALID UNTIL 'infinity';

在最近的一个问题中,另一位用户在用户帐户和 PG-9.2 方面遇到了同样的问题:

PostgreSQL - Password authentication fail after adding group roles

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

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

【讨论】:

  • 这解决了问题。奇怪的是,我什至从未触及过这个值。我注意到它是过去的一个日期,但我认为通过把这个日期放在过去,密码不会过期或其他什么。谢谢!
  • 今天我在 PostgreSQL 9.2.3 上发生了这个“在 unix 时间 0 过期”的事情。这是我使用 PgAdmin 创建的一个新用户。过去,我总是在psql 内或使用createuser 脚​​本创建用户。也许这与 PgAdmin 有关。
  • @Jonathan:是的,事实证明这是一个 pgadmin 错误。见dba.stackexchange.com/questions/36137
  • 谢谢。这里也一样 - 我什么都没碰……失去了 3 个小时的生命。
【解决方案3】:

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

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

CREATE USER myNewUser WITH PASSWORD 'passWord';

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

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

【讨论】:

  • 为了防止可能的混淆:我的意思是“在身份验证期间它同时使用大写和小写”部分,我的意思是在创建用户期间,用户名被转换为小写,但它没有't 在身份验证期间,因此身份验证区分大小写。
  • 我已经为此努力了大约一个小时!谢谢!
【解决方案4】:

假设您在盒子上有 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';

【讨论】:

    猜你喜欢
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    • 2011-10-25
    • 2013-09-04
    • 2021-05-12
    • 1970-01-01
    相关资源
    最近更新 更多