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

gkl3eglg  于 2023-01-20  发布在  Linux
关注(0)|答案(4)|浏览(136)

我正在建立一个新的应用程序,在基于主机的身份验证方面遇到了一些问题。我知道有其他的帖子在那里(espec this one),但是我尝试的似乎都不起作用。
我的错误:
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

甚至那个也不起作用,同样的错误。
我读过the postgresql docs,虽然它帮助解释了发生了什么,(并让我尝试hostnossl,但无济于事)我仍然得到同样的错误。
你看到我的错误了吗?

j0pj023g

j0pj023g1#

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

host   db_name_here   root  ::1/128  trust

不要将trust用于除测试以外的任何用途。一旦您可以使用trust,请将其替换为真实的的身份验证方法,如scram-sha-256

确保使用以下命令重装数据库

pg_ctl -D /path/to/datadir reload

并检查日志文件中的错误(这很重要,因为不会加载语法错误的文件)。
另一种方法是在服务器端启用SSL并将其用于本地连接。
最快的连接方式是通过Unix套接字(如果您没有使用Windows或JDBC驱动程序),也许这是最好的方法。

rseugnpd

rseugnpd2#

您是否尝试过像这样单独允许IPv6本地主机

# TYPE  DATABASE        USER            ADDRESS                 METHOD
host    all             all             ::1/128                 trust
7gs2gvoe

7gs2gvoe3#

添加sslmode=必需;信任服务器证书=真;在您的连接字符串。它肯定会工作。

wsxa1bj1

wsxa1bj14#

在我的例子中,DB托管在不同的服务器上,我们获得DB服务器的访问凭据,因此,在创建连接字符串时,我只需要使用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

相关问题