连接到 PostgreSQL 服务器:致命:没有主机的 pg_hba.conf 条目

Jin*_*Jin 257 postgresql php pg-hba.conf

您好,我正在尝试运行发送给我的网站,但这样做后出现此错误

connect to PostgreSQL server: FATAL: no pg_hba.conf entry for host "4X.XXX.XX.XXX", user "userXXX", database "dbXXX", SSL off in C:\xampp\htdocs\xmastool\index.php on line 37
Run Code Online (Sandbox Code Playgroud)

谷歌搜索后,它说我只需要在 pg_hba.conf 文件中为该特定用户添加一个条目。这是我的 pg_hba.conf 文件。

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# IPv4 local connections:
local dbXXX userXXX md5
host    dbXXX  userXXX  XX.XXX.XXX.XXX           md5
host    all             all             127.0.0.1/32            md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
# Allow replication connections from localhost, by a user with the
# replication privilege.
#host    replication     postgres        127.0.0.1/32            md5
#host    replication     postgres        ::1/128                 md5
Run Code Online (Sandbox Code Playgroud)

但这样做后,错误仍然存​​在。我重新启动了我的 XAMPP 服务器几次,但没有出现任何更改。提前致谢

小智 308

在您的 中添加或编辑以下行postgresql.conf

listen_addresses = '*'
Run Code Online (Sandbox Code Playgroud)

将以下行添加为pg_hba.conf. 它允许所有用户使用加密密码访问所有数据库:

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)

service postgresql restart为您的设置添加此 with或等效命令后重新启动 Postgresql 。

  • 请注意,要使其正常工作,[必须为用户设置密码](http://suite.opengeo.org/docs/latest/dataadmin/pgGettingStarted/firstconnect.html):`sudo -u <username> psql postgres` ,然后在生成的 sql 提示符下的 `\password` 将提示设置一个。 (8认同)
  • 如果您想要一些额外的安全性来限制与私有域的连接(例如在办公室内,而不是 Internet 的其余部分),您可以将第一个数字更改为 10、172 或 192 以匹配您的网络:例如 172.0.0。 0.0/0 而不是 0.0.0.0/0 (4认同)
  • 您还需要添加一个地址为`::0/0` 的行,否则来自 IPv6 地址的连接仍将被拒绝。 (3认同)
  • 在编辑任何应用程序的 .conf 文件时,我会添加另一个最佳实践,请务必首先制作以 .bak 或类似内容结尾的备份副本。然后在编辑的文件中将您的编辑夹在注释行中,以注释更改的开始和结束以及用于目的和联系对象的注释行。这会为你以后省去很多麻烦。请务必记下更改的内容以及更改的文件、位置,并将这些注释放在相关且可定位的一致位置。 (2认同)
  • @NateWanner你的例子应该是172.0.0.0/8,否则它与0.0.0.0/0没有什么不同! (2认同)

小智 29

此解决方案适用于 IPv4 / IPv6

nano /var/lib/pgsql/data/pg_hba.conf

最后添加

host all all      ::1/128      md5
host all postgres 127.0.0.1/32 md5
Run Code Online (Sandbox Code Playgroud)

然后重启postgresql服务

/etc/init.d/postgresql restart
Run Code Online (Sandbox Code Playgroud)

  • 仅当我使用 `::0/0` 时才有效 (2认同)

小智 18

我解决这个问题的方法是:

添加如下行pg_hba.conf

hostnossl    all          all            0.0.0.0/0  trust        
Run Code Online (Sandbox Code Playgroud)

这在 中进行了修改postgresql.conf,如图所示:

listen_addresses = '*'  
Run Code Online (Sandbox Code Playgroud)

我让这个实例在Azure的 VM 中的Centos 7.3Postgres 9.5上运行,鉴于这是一个 POC(概念证明),您不会希望在实际生产环境中没有 SSL 的情况下进行连接。

为了连接到我在 macOS Sierra上使用pgAdmin 4的实例。

  • 不仅 SSL ......在任何不是概念证明并且网络可访问的东西上,你不会*信任*连接,你需要一些*身份验证*。 (8认同)

小智 9

全新 Postgres 9.5 安装,Ubuntu。

关键是本地连接类型,因为 psql 使用域套接字连接。

pg_hba.conf

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
local all all md5
host  all  all 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)


Rav*_*stm 9

下面的内容对我有用:(pg_hba.conf)

# TYPE  DATABASE        USER            ADDRESS                 METHOD
# "local" is for Unix domain socket connections only     
local   all             all                                     md5
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
host    all             all             0.0.0.0/0               trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
host    all             all             0.0.0.0/0               trust
Run Code Online (Sandbox Code Playgroud)

相信

无条件允许连接。此方法允许任何可以连接到 PostgreSQL 数据库服务器的人以他们希望的任何 PostgreSQL 用户身份登录,而无需密码或任何其他身份验证。

MD5

要求客户端提供双 MD5 哈希密码进行身份验证。

请参阅此处了解更多信息


小智 9

就我而言,我遇到了这个问题,我无权编辑服务器上的任何conf文件(.NET连接到DigitalOcean上的托管数据库),因此其他答案不是一个选项。

主机向我提供了一个连接 URL,末尾postgresql://有一个选项。在添加到翻译后的.NET connectionString?sslmode=之前,我遇到了完全相同的错误。"SSL Mode=Prefer;Trust Server Certificate=true;"

这对我或你来说可能不是最佳解决方案,但我想指出这可能是连接字符串而不是服务器配置的问题。

  • 我有同样的问题。当使用 Npgsql 连接时,如果数据库需要 SSL 连接并且您在连接字符串中省略了它,那么您会收到一个奇怪的 pg_hfa.conf 错误。 (2认同)
  • 在尝试连接 psql 时,我对 Azure 的新“灵活服务器”也遇到了同样的问题。在命令中添加 `--set=sslmode=require` 修复了这个问题。 (2认同)

Fin*_*sse 6

当我尝试使用 SSH 隧道连接到本地数据库时,出现了同样的错误。我通过将主机名从localhost更改为 解决了这个问题127.0.0.1


小智 6

  1. 在底部添加以下行pg_hba.conf

    hostnossl all all 0.0.0.0/0 md5

  2. 添加/修改中的行postgresql.conf

    listen_addresses = '*'

  3. 确保正在连接的用户有密码:(例如连接用户名为postgres

    一种。psql使用postgres用户帐户运行以下命令:

    sudo -u postgres psql postgres

    湾 设置密码:

    # \password postgres

在此处输入图片说明


小智 6

Debian 用户使用说明。

以 posgres 用户身份登录:

$ sudo su - postgres
Run Code Online (Sandbox Code Playgroud)

通过查询数据库获取pg_hba.conf的位置:

$ psql -c "SHOW hba_file;"

              hba_file               
-------------------------------------
/etc/postgresql/11/main/pg_hba.conf
(1 row)
Run Code Online (Sandbox Code Playgroud)

打开 pg_hba.conf:

nano /etc/postgresql/11/main/pg_hba.conf
Run Code Online (Sandbox Code Playgroud)

在显示“将您的实际配置放在这里”的地方添加配置:

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5
Run Code Online (Sandbox Code Playgroud)

注销您的用户:

$ exit
logout
Run Code Online (Sandbox Code Playgroud)

重新启动您的 postgres 服务器以使更改生效:

$ sudo systemctl restart postgresql
Run Code Online (Sandbox Code Playgroud)