如何在PostgreSQL中启用GSSAPI

6

我在REDHAT 7上安装了Postgres,然后安装了Python 3.6。我创建了虚拟环境,还在Postgres中创建了一个表。然后我执行了这个Python脚本,但出现了一些错误。

import psycopg2
conn = psycopg2.connect("dbname=postgres user=postgres host=localhost password=postgres")

错误内容为:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/data/scripts/san-automation/lib/python3.7/site-packages/psycopg2/__init__.py", line 126, in connect
    conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
psycopg2.OperationalError: could not initiate GSSAPI security context: Unspecified GSS failure.  Minor code may provide more information
could not initiate GSSAPI security context: Server not found in Kerberos database
FATAL:  Ident authentication failed for user "postgres"

cat /var/lib/pgsql/12/data/pg_hba.conf

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                                     peer
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 ident
# Allow replication connections from localhost, by a user with the
# replication privilege.
local   replication     all                                     peer
host    replication     all             127.0.0.1/32            ident
host    replication     all             ::1/128                 ident

您确定您展示的 pg_hba 是当前正在使用的吗?它甚至没有尝试使用 GSS,所以我对您为什么会得到这样的错误感到困惑。 - jjanes
是的。我是这样做的,=> su postgres => bash-4.2$ vim /var/lib/pgsql/data/pg_hba.conf => 本地 all all 对等体 主机 all all 127.0.0.1/32 信任 - NavaneethaKrishnan
这并不一定意味着它是正在使用的那个。你能用其他工具连接吗?如果可以,尝试使用 select * from pg_hba_file_rulesshow hba_file - jjanes
我没有连接任何其他工具。我只是安装了然后修改了HBA文件。然后我尝试使用Python脚本连接。 - NavaneethaKrishnan
2个回答

3

看起来它正在预加载您的gss/kerberos配置文件(即使它不会使用它们),并在其中发现了一些不喜欢的东西。但是这似乎只是一个警告。真正的错误是最后一行:

FATAL:用户“postgres”的标识验证失败

我认为这与GSS无关。查看服务器日志文件以查看标识验证失败的原因。

如果pg_hba.conf是生效的,则在您的系统上,localhost必须解析为::1而不是127.0.0.1。也就是说,它正在使用ipv6而不是ipv4。


现在我已经将所有4个连接都更改为信任。但是我仍然收到相同的错误。 - NavaneethaKrishnan
你是“重新加载”还是“重启”了服务器,以便更改生效? - jjanes
2
是的,现在它正在工作。systemctl restart postgresql-12。 非常感谢。 - NavaneethaKrishnan
现在我已经将所有连接更改为信任。这样可以吗?还是需要改回ident? - NavaneethaKrishnan
由于您的唯一条目是针对本地主机的,如果您是唯一使用该计算机的人或者您完全信任其他所有用户,则可以这样做。切换回ident可能是一个好主意,但首先您需要解决为什么ident失败的问题。您可能需要在pg_ident.conf中设置映射并使用它。 - jjanes
如果您使用的是 Mac 系统,请运行 pg_ctl -D /opt/homebrew/var/postgresql@14 restart - Mahesh Jamdade

0
致命错误:用户“postgres”的身份验证失败。
我认为上述错误的原因是pgAdmin4中的用户名字段与默认数据库用户名冲突。
通过在终端中键入“psql --help”来检查您的默认用户名。解决用户名错误解决了我的问题。

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