Нет записи 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");
Могу ли я узнать, что я пропустил здесь?
Ответы
Ответ 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