【问题标题】:PostgreSQL - Password authentication fail after adding group rolesPostgreSQL - 添加组角色后密码验证失败
【发布时间】:2013-01-23 00:21:59
【问题描述】:

我对 PostreSQL 还是很陌生。我整个上午都在试图让用户登录正常工作,现在我感到非常沮丧!

所以,我有一个 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”用户执行此操作,但现在我从组中添加和删除了该用户,我不能。

编辑:错误信息...

如果我在 PGAdmin 中使用正确的密码通过 SSH 隧道登录,我会收到错误消息“FATAL: password authentication failed for the user ...”

如果我尝试在没有密码的情况下通过 PGAdmin 中的 SSH 隧道登录,而设置了信任选项,我会收到错误消息:“连接到服务器时出错:fe_sendauth:未提供密码”。

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

\du+ 的输出:

\dg+ 的输出

【问题讨论】:

  • 请给出错误信息并说明您是尝试本地连接还是远程连接
  • 我添加了错误消息。如果不存在“信任”,则本地和远程的“密码验证失败”。如果信任是,它仍然会远程失败。最终我想远程连接。我可以在本地连接,但是那里的密码验证也被破坏了......
  • 你能显示你在安装过程中运行的实际命令吗?还有psql\du+\dg+的输出?
  • 添加了 du 和 dg 的输出。我运行的实际命令变化很大...有些是通过 PGAdmin 完成的。

标签: postgresql


【解决方案1】:

我认为这种行为可能与 pgAdminIII 有关,因为我遇到了类似的问题,而且似乎每次我使用 pgAIII 作为 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... 看起来很可疑。严格来说,gisadminpostgisrwpostgres 的密码不再有效,这或许可以解释为什么这些帐户基于密码的身份验证方法会失败。

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

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

    【讨论】:

    • 1970 是默认条目,我认为意味着“密码不会过期”。
    • @alexgleith:如果我创建用户时它会有这个,我相信它是默认条目。但事实并非如此。
    • 我认为这解决了它!不知何故,这些小组输入了一个错误的密码,直到日期......
    猜你喜欢
    • 1970-01-01
    • 2017-01-25
    • 2018-11-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-21
    相关资源
    最近更新 更多