如何修复“没有针对主机“::1”的pg_hba.conf条目”问题

3
我正在搭建一款新应用程序,但在主机身份验证方面遇到了一些问题。我知道有其他帖子(例如这个),但是我尝试的所有方法似乎都不起作用。
我的错误信息如下: no pg_hba.conf entry for host "::1", user "root", database "db_name_here", SSL off
我的pg_hba.conf文件如下:
# TYPE  DATABASE    USER  ADDRESS METHOD
local   all         all           peer map=usermap
local   replication all           peer map=usermap
hostssl all         all   all     md5
host    replication all   all     md5

我有一条过去留下来的备忘录,上面写着以下内容可行:

host   db_name_here   root  ::1  trust

但它没有起作用。
我甚至尝试过:
all     all     all     all     trust

即使那个也不行,还是出现了同样的错误。

我已经阅读了postgresql文档,虽然它帮助我理解了发生了什么事情(并让我尝试了hostnossl,但无济于事),但我仍然遇到了同样的错误。

您看到我的错误了吗?


要么你编辑了错误的HBA文件,要么在编辑正确的文件后没有重新启动/重新加载数据库。 - undefined
谢谢@jjanes,我一直在使用这个应用程序(在同一台服务器上),但是没有对数据库进行操作。我觉得你说得很对。 - undefined
4个回答

4

您的pg_hba.conf条目缺少网络掩码;仅使用IP地址是语法错误。这个应该可以工作:

host   db_name_here   root  ::1/128  trust
不要在除测试之外的任何地方使用trust。一旦你让它工作,就将其替换为真正的身份验证方法,比如scram-sha-256

确保使用以下命令重新加载数据库:

pg_ctl -D /path/to/datadir reload

需要检查日志文件是否有错误(这很重要,因为语法上错误的文件无法加载)。

另一种选择是在服务器端启用SSL并将其用于本地连接。

如果您不是使用JDBC驱动程序或Windows操作系统,则最快的连接方式是通过Unix套接字,也许这是最好的选择。


一直在尝试以各种方式执行这个操作,但都没有成功。在编辑pg_hba.conf文件以包含新条目后,PostgreSQL服务无法运行。 - undefined
严格来说,我能够编辑pg_hba.conf文件,然后使用su - username切换到postgres用户,并运行你分享的pg_ctl...命令,一切都没有出现错误。但是当我使用数据库启动应用程序时,仍然会出现错误提示:no pg_hba.conf entry for host "::1", user "root", database "db_name_here", SSL off - undefined
啊,对不起。你的输入缺少了子网掩码。我已经修正了答案。重新加载后请务必检查日志文件。 - undefined
谢谢@laurenz-albe,正在尝试中。 - undefined
1
@Marinaio 请使用除了 trust 以外的其他东西。 - undefined
显示剩余4条评论

2
你尝试过像这样单独允许IPv6本地主机吗?
# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             ::1/128                 trust

0
在我的情况下,数据库托管在不同的服务器上,我们获得了访问数据库服务器的凭据。因此,在创建连接字符串时,我只需要使用sslmode:require即可。
dbURI := fmt.Sprintf("sslmode=require host=%s port=%s user=%s dbname=%s password=%s", dbHost, dbPort, username, dbName, password)
log.Println("Postgres connection string: " + dbURI)

conn, err := gorm.Open("postgres", dbURI)

return conn

0
在你的连接字符串中添加sslmode=Require;和Trust Server Certificate=true;。这样肯定会起作用的。

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