更改密码后PostgreSQL用户无法连接到服务器


10

我用创建的4个角色满足了这一要求:
使用GUI(1)在pgAdmin III中更改了用户的密码后,该用户无法再登录。
pgAdmin III显示错误消息:

An error has occurred:

Error connecting to the server: FATAL:  password authentication failed for user "sam"
FATAL:  password authentication failed for user "sam"

我的系统:Ubuntu 12.04上的Postgresql 9.2

有没有什么办法解决这一问题?

(1):使用帐户postgres登录,右键单击“登录角色”中的用户,转到“定义”选项卡,然后输入密码

Answers:


15

您可能会被以下PgAdmin错误changelog)所咬伤:

2012-11-28 AV 1.16.1默认情况下,日期选择器控件返回完整的时间戳,这可能会导致作业和角色有效日期的日期更改。忽略时间部分。

可以看到此错误设置了密码过期日期,例如1970年1月1日。在这种情况下,尝试连接时的错误消息与使用错误的密码相同。

您可以使用以下方法检查这些到期日期:

SELECT usename,valuntil FROM pg_user;

如果输入有误,请使用以下命令将其重置:

ALTER USER username VALID UNTIL 'infinity';

并升级pgAdmin。


非常感谢你!这样就解决了问题。每次我重置用户密码时,pgAdmin都会将有效期至时间设置为01-01-1970,以便用户无法再登录。
Cao Minh Tu

你说对了!该死的臭虫
卡特·科尔

我应该怎么登录到psql ???那就是我刚刚更新的角色。
ericpeters0n

1
@ ericpeters0n:暂时将身份验证方法切换到该帐户的文件中trustpeerpg_hba.conf文件中。
DanielVérité'16

谢谢,整理好了。对于以后的用户,“信任”表示:重新启动postgres后,如果您与特权用户具有相同名称(例如,用户名'postgres'),则无需密码身份验证即可运行psql 。因此,“ su-postgres psql”将允许您登录并更正密码或有效日期。
ericpeters0n '16

3

简单的操作是使用psql或pgAdmin登录,然后

ALTER USER sam WITH PASSWORD 'new_password';

现在,如果您无法使用超级用户帐户登录,则可以通过更改该用户的pg_hba.conf设置并重新加载配置来恢复(有时我发现这需要重新启动服务器,但不确定为什么)。

您可以做的是添加一行,以便您可以使用ident(在9.2版中进行对等)方法(如果您可以使用与用户同名的本地系统帐户)登录用户的本地连接,或这是不可能的)设置为“信任”(非常临时!)。如果使用信任,请尽快取消,因为这表示“信任用户就是他/她所声明的人!” 因此,如果在即时恢复需求之外保持启用状态,则此设置很危险。

登录后,您可以重置上面的密码。


pgAdmin不应该执行相同的命令吗?
dezso

(注意我说的是psql或pgAdmin。我该怎么做才能使其更清楚?)
克里斯·特拉弗斯

不,不,我只是认为在GUI中更改密码也是如此。如果我无法想象会出什么问题?
dezso

可能出什么问题了?错别字是初学者的密码...。–
克里斯·特拉弗斯

一旦以postgres身份登录,就不能简单地再次设置密码吗?
dezso

2

对于Windows变体-由于9.2版Windows x64安装的pgAdmin,我也经历了这个讨厌的错误。它使我的生产陷入瘫痪。

C:\Program Files\PostgreSQL\9.2\data或文件夹中C:\Program Files (x86)\PostgreSQL\9.**x**\data,您会找到pg_hba.conf文本文件。

找到以下几行:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

并将METHOD md5更改为“ trust”,如下所示:

# TYPE  DATABASE        USER            ADDRESS                 METHOD

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

Windows>Run“ services.msc”类型中,然后输入[enter],找到正确的PostgreSQL实例并重新启动它。

您的数据库安全性现已全面开放!在将所有相关用户的用户密码到期时间更改为2099年之后,请注意警告,将其恢复为md5。


1

如果尚未尝试过,请查看pg_hba.conf文件。它将被命名为/var/lib/pgsql/9.3/data/pg_hba.conf(Fedora 20); 您可能必须使用'find / -name pg_hba.conf'来找到它。

在文件底部,将“ METHOD”值更改为“ trust”以进行本地测试(有关完整信息,请参见postgres文档)。重新启动计算机,以确保一切均已开始干净并读取新的参数。

希望这可以解决您的麻烦。它使用PostgreSQL 9.3解决了我在Fedora 20上的问题。

更新2016-10-14:

在Ubuntu上,所需的文件名是/etc/postgresql/9.5/main/pg_hba.conf仅用于本地测试,将其修改为如下所示:

...
#
# Database administrative login by Unix domain socket
local   all             postgres                                peer

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
# local   all             all                                     peer
  local   all             all                                     trust
# IPv4 local connections:
# host    all             all             127.0.0.1/32            md5
  host    all             all             127.0.0.1/32            trust

使用METHOD“信任”的两行是新的。它们允许您不使用用户名/密码进行连接。

完成后,您将需要通过以下方式重新启动服务器:

sudo systemctl restart postgresql 

为了使pg_hba.conf生效,您只需要重新加载,而无需重新启动。此外,您的建议似乎不完整,因为目前尚不清楚如何解决该问题。
dezso 2014年

1

我只是遇到了同样的问题,结果发现我有多个具有相同名称的用户(区分大小写)。一旦我合并所有权并删除了所有权,至少是清楚的。根据连接方法的不同,案件不一定要进行身份验证。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.