没有主机的pg_hba.conf条目

时间:2009-09-10 15:33:37

标签: perl postgresql database-permissions

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

DBI connect('database=chaosLRdb;host=192.168.0.1;port=5433','postgres',...) 
failed: FATAL:  no pg_hba.conf entry for host "192.168.0.1", user "postgres", database "chaosLRdb", SSL off

这是我的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");

我可以知道我想念的是什么吗?

13 个答案:

答案 0 :(得分:33)

在你的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,您可以使用perl或以下shell脚本:

 echo -n 'chaos123' | md5sum
 > d6766c33ba6cf0bb249b37151b068f10  -

那么你的连线就像:

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

有关详细信息,请参阅documentation of postgres 8.X's pg_hba.conf file

答案 1 :(得分:16)

如果你可以改变这一行:

host    all        all         192.168.0.1/32        md5

有了这个:

host    all        all         all                   md5

你可以看看这是否解决了这个问题。

但另一个考虑因素是你的postgresql端口(5432)对黑客的密码攻击非常开放(也许他们可以强制密码)。您可以将postgresql端口5432更改为“33333”或其他值,以便他们无法知道此配置。

答案 2 :(得分:6)

您的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");

答案 3 :(得分: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

答案 4 :(得分:2)

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

首先你找到你的pg_hba.conf并写:

local all all md5

之后重新启动pg server:

postgresql restart

sudo /etc/init.d/postgresql restart

答案 5 :(得分:1)

对于那些在尝试连接到本地数据库并尝试使用类似问题时遇到类似问题的人 con = psycopg2.connect(database="my_db", user="my_name", password="admin"),尝试传递附加参数,以便以下每天保存我:
con = psycopg2.connect(database="my_db", user="my_name", password="admin", host="localhost")

答案 6 :(得分:1)

对于那些在DBeaver中遇到此错误的人,在以下行找到了here解决方案:

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

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

答案 7 :(得分:0)

还要检查PGHOST变量:

  

ECHO $ PGHOST

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

答案 8 :(得分:0)

如果您收到如下错误:

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

答案 9 :(得分:0)

顺便说一句,在我的情况下,我需要在url中指定user / pwd,而不是作为独立属性,它们被忽略,我的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"/>

答案 10 :(得分:0)

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

答案 11 :(得分:0)

在pg_hba.conf中添加以下内容

hostnossl全部都是0.0.0.0/0信任

然后重新启动服务。

答案 12 :(得分:-2)

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

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