нет записи pg_hba.conf для хоста - PullRequest
51 голосов
/ 10 сентября 2009

Я получаю следующую ошибку при попытке подключиться с использованием 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");

Могу ли я знать, что мне здесь не хватает?

Ответы [ 9 ]

33 голосов
/ 19 января 2011

В вашем файле 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 или следующий скрипт:

 echo -n 'chaos123' | md5sum
 > d6766c33ba6cf0bb249b37151b068f10  -

Итак, ваша соединительная линия будет выглядеть примерно так:

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

Для получения дополнительной информации вот документация файла pg_hba.conf для postgres 8.X .

16 голосов
/ 03 января 2016

Если вы можете изменить эту строку:

host    all        all         192.168.0.1/32        md5

С этим:

host    all        all         all                   md5

Вы можете увидеть, решит ли это проблему.

Но еще одно соображение - ваш порт postgresql (5432) очень открыт для хакерских атак паролем (возможно, они могут взломать пароль) Вы можете изменить свой порт postgresql 5432 на «33333» или другое значение, чтобы они не могли знать эту конфигурацию.

6 голосов
/ 11 сентября 2009

Ваша конфигурация сервера 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");

2 голосов
/ 19 марта 2014

Чтобы решить эту проблему, вы можете попробовать это.

сначала вы должны найти свой pg_hba.conf и написать:

local all all md5

после этого перезапустите сервер pg:

postgresql restart

или

sudo /etc/init.d/postgresql restart
1 голос
/ 11 октября 2018

Для тех, кто получает эту ошибку в DBeaver, было найдено решение здесь в строке:

@ lcustodio на странице SSL, установите режим SSL: требуют и оставьте пустую фабрику SSL или используйте org.postgresql.ssl.NonValidatingFactory

В разделе «Сеть» -> вкладка «SSL» я установил флажок «Использовать SLL» и установил «Дополнительно» -> «Режим SSL = требуется», и теперь он работает.

1 голос
/ 03 апреля 2015

Для тех, у кого похожая проблема, пытаясь подключиться к локальной базе данных и пытаясь, как
con = psycopg2.connect(database="my_db", user="my_name", password="admin"), попробуйте передать дополнительный параметр, чтобы следующее сэкономило мне день:
con = psycopg2.connect(database="my_db", user="my_name", password="admin", host="localhost")

0 голосов
/ 28 февраля 2018

Кстати, в моем случае мне нужно было указать пользователя / pwd в URL-адресе, а не как независимые свойства, они были проигнорированы, и мой пользователь ОС использовал для подключения

Моя конфигурация находится в файле server.xml WebSphere 8.5.5

<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 голосов
/ 02 августа 2017

Если вы получаете сообщение об ошибке, подобное приведенному ниже:

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
0 голосов
/ 03 сентября 2014

также проверьте переменную PGHOST:

ECHO $ ​​PGHOST

чтобы узнать, соответствует ли оно имени локальной машины

...