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

4

我对PostreSQL非常新手。我已经花了整个上午来尝试正确地使用户登录,但是现在非常沮丧!

所以,我有一个PostGIS数据库,版本为9.2,是OpenGeo软件套件的一部分。我可以使用postgres用户访问数据库,但希望创建一个组角色和用户,使其能够访问数据库,以便可以在该数据库中创建表格和进行更新/选择/删除等操作。

我可以创建用户,这很有效,我也可以使用该用户登录。我可以创建组角色并分配角色权限。然后,我将用户添加到组角色中,此后就无法登录!

甚至连当我将用户postgres添加到组中时,该用户也无法登录。我删除了组,但无法登录仍然存在。

现在,我已经对pg_hba.conf进行了大量尝试。我现在可以作为postgres登录,但仅在启用“trust”时才可以,并且我无法使用任何软件(例如PGAdminIII)登录。

如果能够得到一些关于出现问题的建议,并重新启用身份验证登录,那将是非常好的。

pg_hba:

Code:
# Database administrative login by Unix domain socket
local   all             postgres                                trust
local all gisadmin trust

# TYPE  DATABASE        USER            ADDRESS                 METHOD
local   all         opengeo                           md5
local   all         opengeo                           md5

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


# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#local   replication     postgres                                peer
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5

作为最后的说明,我希望能够通过SSH隧道登录。我原本可以使用“postgres”用户进行登录,但现在我已经将该用户添加并从组中删除,所以无法登录。
编辑:错误信息...
如果我使用正确的密码通过SSH隧道在PGAdmin中登录,我会收到错误消息“FATAL:密码验证失败,用户...”。
如果我在设置了信任选项且没有输入密码的情况下尝试通过SSH隧道在PGAdmin中登录,则会收到错误消息:“连接到服务器时出错:fe_sendauth:未提供密码”。
第一个错误仍然发生在本地登录时,只是通过SSH和psql,但第二个错误消失了,我可以登录。
\du+ 的输出: enter image description here \dg+ 的输出: enter image description here

请提供错误信息,并说明您是尝试本地连接还是远程连接。 - Daniel Vérité
我添加了错误信息。如果没有“信任”,则本地和远程都会显示“密码验证失败”。即使存在信任,仍然无法在远程连接成功。最终我想要远程连接。我可以在本地连接,但是密码认证也有问题... - Alex Leith
你能展示一下安装过程中实际运行的命令吗?还有在 psql 中执行 \du+\dg+ 的输出结果吗? - Craig Ringer
增加了du和dg的输出。我运行的实际命令差别很大...有些是通过PGAdmin完成的。 - Alex Leith
2个回答

6
我认为这种行为可能与pgAdminIII有关,因为我遇到了类似的问题,每次使用pgAIII作为postgres连接到我的数据库并查看用户属性中的定义选项卡时,“过期日期”复选框都被选中,而1/1/1970或31/12/1969被设置为过期日期。Daniel提出的解决方案有效,所以很明显问题是密码过期引起的。
看起来这个错误在pgAdmin 1.16.2中已经得到了修正,您可以在更改日志中看到。

http://www.pgadmin.org/development/changelog.php

干杯


2
\du+输出中,Password valid until 1970-01-01 00:00:00+00……看起来相当可疑。严格来说,gisadminpostgisrwpostgres的密码已经不再有效,这可能解释了为什么这些帐户的基于密码的身份验证方法失败。
您可以尝试在这些帐户上执行ALTER USER用户名valid until 'infinity',看看是否解决了问题。
此外,在通过SSH隧道连接到PG时,请注意以host开头的pg_hba.conf条目将被忽略。这些条目仅用于Unix域套接字的连接考虑。有时用户会将其与从localhost到本身的连接混淆。

1970年是默认项,意思是“密码不会过期”,我想。 - Alex Leith
@alexgleith:如果我创建一个用户时会有这个默认条目,我会相信它是默认条目。但事实并非如此。 - Daniel Vérité
我想这个问题已经解决了!不知怎么回事,这些组在设置一个错误的密码有效期限。 - Alex Leith

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