2013-01-23 54 views
4

我是PostreSQL的新手。我花了整整一个早上试图让用户登录正常工作,现在我非常沮丧!PostgreSQL - 添加组角色后密码验证失败

所以,我有一个PostGIS数据库,版本9.2,作为OpenGeo软件套件的一部分。我可以使用postgres用户访问数据库,但想要让组角色和用户有权访问数据库,以便它可以在该数据库中创建表和更新/选择/删除等。

我可以创建一个用户,该工作,我可以登录该用户。我可以创建组角色并为角色分配权限。然后,我可以将用户添加到组角色,然后可以不再需要登录!

它甚至得到了这样,当我将用户postgres添加到组,该用户无法登录。我删除了该组,但无法登录仍然存在。

现在,我已经玩了很多pg_hba.conf。我现在可以登录为postgres,但只有在启用“信任”后,我才能使用任何软件登录,例如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:失败的用户密码验证......”

如果我尝试通过PGAdmin中的SSH隧道进行登录,而没有设置密码,而设置了trust选项,则会显示错误:“连接到服务器的错误:fe_sendauth:没有提供密码”。

第一次失误本地登录时,只需通过SSH和psql仍然发生,但第二个消失了,我可以登录的

输出\杜+: 的enter image description here

输出\ DG + enter image description here

+0

请给出错误信息,说如果你试图连接本地或远程 –

+0

我添加了错误消息。如果“信任”不在那里,则本地和远程的“密码验证失败”。如果信任,它仍然远程失败。 最终我想远程连接。我可以在本地连接,但是密码验证也在那里被破坏... –

+0

您可以显示您在安装过程中运行的实际命令吗? 'psql'中'\ du +'和'\ dg +'的输出? –

回答

6

我认为这种行为可能与pgAdminIII有关,因为我有类似的问题,并且似乎每次我使用pgAIII连接到我的db作为postgres并查看用户属性中的定义选项卡时, “过期日期”被检查并且1/1/1970或31/12/1969被设置为过期日期。 Daniel提出的解决方案的工作原理很明显,问题在于密码到期。

看来,这个错误在pgAdmin的1.16.2纠正,你可以在更改看到:

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

干杯

2

\du+输出时,密码有效期至1970-01-01 00:00:00 + 00 ...看起来很可疑。严格地说,gisadmin,postgisrwpostgres的密码不再有效,因此可以解释为什么这些帐户的基于密码的身份验证方法失败。

您可以尝试ALTER USER username valid until 'infinity'这些帐户,看看是否解决了这个问题。

此外,当通过SSH隧道连接到PG时,请注意,以host开头的pg_hba.conf条目将被忽略。这些条目仅用于连接到Unix域套接字。有时用户会将其与localhost与其自身的连接混淆。

+0

1970年是默认条目,意思是“密码不会过期”,我想。 –

+0

@alexgleith:我认为这是默认条目,如果当我创建一个用户它会有这个。但事实并非如此。 –

+0

我觉得这个固定了!不知何故,这些组织将密码输入有效期至... –