Подтвердить что ты не робот

Нет записи pg_hba.conf для хоста

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

Могу ли я узнать, что я пропустил здесь?

4b9b3361

Ответ 1

В вашем файле 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'd пароль, это может сработать, если вы обрезаете строки. Чтобы получить md5, вы можете использовать perl или следующую оболочку script:

 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.

Ответ 2

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

host    all        all         192.168.0.1/32        md5

При этом:

host    all        all         all                   md5

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

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

Ответ 3

Ваша конфигурация сервера 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 script для использования вновь созданного пользователя


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

Ответ 4

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

сначала вы узнаете свой pg_hba.conf и напишите:

local all all md5

после перезапуска сервера pg:

postgresql restart

или

sudo /etc/init.d/postgresql restart

Ответ 5

Для тех, у кого есть аналогичная проблема, пытающаяся подключиться к локальному db и пытаться как
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

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

ECHO $​​PGHOST

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

Ответ 7

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

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