主机没有pg_hba.conf条目


80

尝试使用DBI进行连接时出现以下错误

DBI connect('数据库= chaosLRdb;主机= 192.168.0.1;端口= 5433','postgres',...) 
失败:致命:主机“ 192.168.0.1”,用户“ postgres”,数据库“ chaosLRdb”,SSL关闭的主机没有pg_hba.conf条目

这是我的pg_hba.conf文件:

# "local" is for Unix domain socket connections only
local   all         all                               md5
# IPv4 local connections:
host    all         all         127.0.0.1/32          md5
# IPv6 local connections:
host    all         all         ::1/128               md5

host    all         postgres    127.0.0.1/32          trust

host    all        postgres     192.168.0.1/32        trust

host    all        all         192.168.0.1/32        trust

host    all        all         192.168.0.1/128        trust

host    all        all         192.168.0.1/32        md5

host    chaosLRdb    postgres         192.168.0.1/32      md5
local    all        all         192.168.0.1/32        trust

我的Perl代码是

#!/usr/bin/perl-w
use DBI;
use FileHandle;

print "Start connecting to the DB...\n";

@ary = DBI->available_drivers(true);
%drivers = DBI->installed_drivers();
my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433", "postgres", "chaos123");

我可以知道我在这里想念的吗?

Answers:


37

在您的pg_hba.conf文件中,我看到一些不正确且令人困惑的行:

# fine, this allows all dbs, all users, to be trusted from 192.168.0.1/32
# not recommend because of the lax permissions
host    all        all         192.168.0.1/32        trust

# wrong, /128 is an invalid netmask for ipv4, this line should be removed
host    all        all         192.168.0.1/128       trust

# this conflicts with the first line
# it says that that the password should be md5 and not plaintext
# I think the first line should be removed
host    all        all         192.168.0.1/32        md5

# this is fine except is it unnecessary because of the previous line
# which allows any user and any database to connect with md5 password
host    chaosLRdb  postgres    192.168.0.1/32        md5

# wrong, on local lines, an IP cannot be specified
# remove the 4th column
local   all        all         192.168.0.1/32        trust

我怀疑如果您对密码进行了md5输入,则如果您剪裁这些线,则可能会起作用。要获取md5,可以使用perl或以下shell脚本:

 echo -n 'chaos123' | md5sum
 > d6766c33ba6cf0bb249b37151b068f10  -

因此,您的连接线会像这样:

my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433",
    "chaosuser", "d6766c33ba6cf0bb249b37151b068f10");

有关更多信息,这是postgres 8.X的pg_hba.conf文件的文档


是的,由于错误,它可能拒绝加载pg_hba.conf文件。
Peter Eisentraut 2011年

35

如果可以更改此行:

host    all        all         192.168.0.1/32        md5

有了这个:

host    all        all         all                   md5

您可以查看是否可以解决问题。

但另一个考虑因素是您的postgresql端口(5432)非常容易受到黑客的密码攻击(也许他们可以强行使用密码)。您可以将您的postgresql端口5432更改为“ 33333”或其他值,以使他们无法知道此配置。


我试图像“托管所有* md5”那样做。但这没有用。但是我成功了。非常感谢。
Rahal Kanishka

1
这个解决方案使我意识到我根本不了解第四个参数,谢谢!
Sebastien DErrico '17

7

您的postgres服务器配置似乎正确

host    all         all         127.0.0.1/32          md5
host    all         all         192.168.0.1/32        trust
那应该授予从客户端到postgres服务器的访问权限。因此,这使我相信用户名/密码失败了。

通过为该数据库创建特定用户来进行测试

createuser -a -d -W -U postgres chaosuser

然后调整您的perl脚本以使用新创建的用户

my $dbh = DBI->connect("DBI:PgPP:database=chaosLRdb;host=192.168.0.1;port=5433", "chaosuser", "chaos123");


11
他因缺少pg_hba.conf行而出错,这意味着尚未检查密码。
Peter Eisentraut 2011年

4

若要解决此问题,您可以尝试此。

首先,您通过以下方式找到了pg_hba.conf:

从根目录cd /etc/postgresql/9.5/main

并使用打开文件

sudo nano pg_hba.conf

然后添加以下行:

local   all         all                               md5

到您的pg_hba.conf,然后使用以下命令重新启动:

sudo service postgresql restart

3

要解决此问题,您可以尝试一下。

首先,您要找到pg_hba.conf并输入:

local all all md5

之后重启pg服务器:

postgresql restart

要么

sudo /etc/init.d/postgresql restart

2

对于那些谁收到此错误DBeaver发现该溶液这里在行:

在SSL页面上的@lcustodio上,设置SSL模式:require并将SSL Factory留空或使用org.postgresql.ssl.NonValidatingFactory

在网络-> SSL选项卡下,我选中了使用SLL复选框,并设置了高级-> SSL模式= require,现在可以使用了。


1

对于那些尝试连接到本地db并尝试使用like
con = psycopg2.connect(database="my_db", user="my_name", password="admin")遇到类似问题的人,请尝试传递附加参数,因此以下内容为我节省了一天:
con = psycopg2.connect(database="my_db", user="my_name", password="admin", host="localhost")


使用“本地”也节省了我的一天!完整的主机名可以在远程工作,但不能在本地工作。
戴夫2015年

1

如果出现以下错误:

OperationalError: FATAL:  no pg_hba.conf entry for host "your ipv6",
                  user "username", database "postgres", SSL off

然后使用您的Mac地址添加如下所示的条目。

host   all    all       [your ipv6]/128         md5

我的问题与IPV6地址有关,因此,专门添加我的IPV6地址即可解决此问题。感谢Shiddu
Phi

0

还要检查PGHOST变量:

回声$ PGHOST

查看它是否与本地计算机名称匹配


0

顺便说一句,在我的情况下,我需要在url中指定用户/密码,而不是作为独立属性,它们被忽略,并且我的OS用户用于连接

我的配置在WebSphere 8.5.5 server.xml文件中

<dataSource 
    jndiName="jdbc/tableauPostgreSQL" 
    type="javax.sql.ConnectionPoolDataSource">
    <jdbcDriver 
        javax.sql.ConnectionPoolDataSource="org.postgresql.ds.PGConnectionPoolDataSource" 
        javax.sql.DataSource="org.postgresql.ds.PGPoolingDataSource" 
        libraryRef="PostgreSqlJdbcLib"/>
    <properties 
        url="jdbc:postgresql://server:port/mydb?user=fred&amp;password=secret"/>
</dataSource>

这将不起作用,并出现错误:

<properties 
    user="fred"
    password="secret"
    url="jdbc:postgresql://server:port/mydb"/>

0

就我而言,我只是更改了包含IPV4的spring.postgresql.jdbc.url,我将其更改为127.0.0.1



-2

在pgadmin中验证postgres连接的主机名/地址,并在连接参数中使用相同的名称。

DBI connect('database = chaosLRdb; host = “保持所提到的内容” ; port = 5433','postgres',...)


欢迎使用Stack Overflow!用户从不提及它可以使用pgAdmin访问数据库。
古斯塔沃·川本
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.