连接到PostgreSQL服务器:严重:主机没有pg_hba.conf条目


178

您好,我正在尝试运行发送给我的网站,但执行此操作后出现此错误

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

谷歌搜索之后,它说我只需要在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

但是这样做之后,错误仍然存​​在。我多次重新启动了XAMPP服务器,但未显示任何更改。提前致谢


您是否重启了PostgreSQL本身,而不仅仅是Web服务器?尝试SELECT pg_reload_conf()
Craig Ringer

Answers:


220

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

listen_addresses = '*'

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

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

在使用service postgresql restart或等效的命令添加此命令后,重新启动Postgresql 。


5
请注意,要使此方法起作用,必须为用户设置密码sudo -u <username> psql postgres,然后\password在出现的sql提示符下将提示您设置一个。
约瑟夫

2
添加此代码后,别忘了重新启动postgresql:service postgresql restart
ammills01

如果您需要一点额外的安全性来限制到私有域的连接(例如在办公室内部,而不是Internet的其余部分),则可以将第一个数字更改为10、172或192以匹配您的网络:例如172.0。 0.0 / 0代替了0.0.0.0/0
Nate Wanner

22

此解决方案适用于IPv4 / IPv6

纳米/var/lib/pgsql/data/pg_hba.conf

最后添加

host all all      ::1/128      md5
host all postgres 127.0.0.1/32 md5

然后重新启动postgresql服务

/etc/init.d/postgresql restart

12

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

在以下行中添加了以下行pg_hba.conf

hostnossl    all          all            0.0.0.0/0  trust        

并在中对其进行了修改postgresql.conf,如下所示:

listen_addresses = '*'  

考虑到这是一个POC(概念证明),您在实际的生产环境中没有SSL时就不想连接,因此我在Azure的VM中的Centos 7.3Postgres 9.5上运行了该实例。

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


4
不仅SSL ...在任何未经概念证明且可通过网络访问的事物上,您将不信任连接,还需要进行一些身份验证
joanolo

5

全新安装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

3

尝试使用SSH隧道连接到本地数据库时,我遇到了相同的错误。我通过更改主机名解决它localhost127.0.0.1


3
  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

    b。设置密码:

    # \password postgres

在此处输入图片说明


1
不要将信任用于远程连接
eckes

2

查找正确的配置文件:

su - postgres -c "psql -t -P format=unaligned -c 'show hba_file';"

在文件末尾添加以下内容:

local all all peer

然后重新启动PostgreSQL应用程序:

/bin/systemctl restart postgresql*.service

1

就我而言,我必须添加错误信息建议的确切行。无法通过添加具有所有IP的“所有”用户作为规则来绕过它。现在就像:

CentOS 7上的PosgreSQL 10.5

# IPv4 local connections:
host    all             all             127.0.0.1/32                    md5
host    <db_name>       postgres        <my_client_machine_ip>/32       md5

1

下面为我​​工作:(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

信任

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

md5

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

在这里参考更多


0

针对Debian用户的说明。

以posgres用户身份登录:

$ sudo su - postgres

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

$ psql -c "SHOW hba_file;"

              hba_file               
-------------------------------------
/etc/postgresql/11/main/pg_hba.conf
(1 row)

打开pg_hba.conf:

nano /etc/postgresql/11/main/pg_hba.conf

在显示“在此处放置您的实际配置”的地方添加配置:

# TYPE DATABASE USER CIDR-ADDRESS  METHOD
host  all  all 0.0.0.0/0 md5

注销到您的用户:

$ exit
logout

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

$ sudo systemctl restart postgresql

-1

它仅对我起作用,添加以下配置:

# IPv4 local connections:
host    all             all             127.0.0.1/32            md5
host    all             all             0.0.0.0/0               md5
# IPv6 local connections:
host    all             all             ::1/128                 md5
host    all             all             0.0.0.0/0               md5


-4

只需在配置文件中写入以下序列:

const 
  pg                = require('pg'),
config          = require('./db-config'),
    dbOption    = {
      host    : ,
      port    : ,
      user    : ,
      password  :,
      database  : 
    },

  pool          = new pg.Pool(dbOption)
  pg.defaults.ssl = true;

这就是全部。该文件db-config包含主机,用户,密码和数据库的规范数据。有了这个小小的改动,它就可以在本地和通过服务(Heroku)中完美运行。经过全面测试。


这是什么(在哪里)db-config?它是XAMPP配置文件吗?
ypercubeᵀᴹ
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.