Kein pg_hba.conf-Eintrag für Host

75

Beim Versuch, eine Verbindung über DBI herzustellen, wird folgende Fehlermeldung angezeigt

DBI-Verbindung ('Datenbank = ChaosLRdb; Host = 192.168.0.1; Port = 5433', 'Postgres', ...) 
fehlgeschlagen: FATAL: Kein pg_hba.conf-Eintrag für Host "192.168.0.1", Benutzer "postgres", Datenbank "ChaosLRdb", SSL aus

Hier ist meine pg_hba.conf-Datei:

# "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

Mein Perl-Code ist

#!/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");

Darf ich wissen, was ich hier vermisse?

gunr2171
quelle

Antworten:

37

In Ihrer Datei pg_hba.conf sehe ich einige falsche und verwirrende Zeilen:

# 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

Ich vermute, wenn Sie das Passwort md5 haben, könnte dies funktionieren, wenn Sie die Zeilen kürzen. Um den MD5 zu erhalten, können Sie Perl oder das folgende Shell-Skript verwenden:

 echo -n 'chaos123' | md5sum
 > d6766c33ba6cf0bb249b37151b068f10  -

Dann möchte Ihre Verbindungsleitung so etwas wie:

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

Für weitere Informationen, hier ist die Dokumentation von Postgres pg_hba.conf Datei 8.X .

Grau
quelle
Ja, es hat sich wahrscheinlich geweigert, die Datei pg_hba.conf wegen der Fehler zu laden.
Peter Eisentraut
34

Wenn Sie diese Zeile ändern können:

host    all        all         192.168.0.1/32        md5

Mit diesem:

host    all        all         all                   md5

Sie können sehen, ob dies das Problem löst.

Eine weitere Überlegung ist, dass Ihr Postgresql-Port (5432) sehr offen für Passwortangriffe mit Hackern ist (möglicherweise können sie das Passwort brutal erzwingen). Sie können Ihren Postgresql-Port 5432 in '33333' oder einen anderen Wert ändern, damit diese Konfiguration nicht bekannt ist.

Hasan Thunfisch Oruç
quelle
Ich habe versucht, es wie "Host all all * md5" zu tun. Aber es hat nicht funktioniert. Aber ich habe es auf deine Weise geschafft. Danke vielmals.
Rahal Kanishka
1
Diese Lösung hat mir klar gemacht, dass ich den vierten Parameter überhaupt nicht verstanden habe, danke!
Sebastien DErrico
7

Ihre Postgres-Serverkonfiguration scheint korrekt zu sein

host    all         all         127.0.0.1/32          md5
host    all         all         192.168.0.1/32        trust
Dies sollte den Zugriff des Clients auf den Postgres-Server gewähren. Das lässt mich glauben, dass der Benutzername / das Passwort fehlschlägt.

Testen Sie dies, indem Sie einen bestimmten Benutzer für diese Datenbank erstellen

createuser -a -d -W -U postgres chaosuser

Passen Sie dann Ihr Perl-Skript an, um den neu erstellten Benutzer zu verwenden

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

Adam
quelle
11
Die Tatsache, dass er eine Fehlermeldung bezüglich einer fehlenden pg_hba.conf-Zeile erhalten hat, bedeutet, dass das Kennwort noch nicht überprüft werden muss.
Peter Eisentraut
4

Um dieses Problem zu beheben, können Sie dies versuchen.

Zuerst haben Sie Ihre pg_hba.conf herausgefunden durch:

cd /etc/postgresql/9.5/main aus Ihrem Stammverzeichnis

und Datei mit öffnen

sudo nano pg_hba.conf

Fügen Sie dann diese Zeile hinzu:

local   all         all                               md5

zu Ihrer pg_hba.conf und starten Sie dann mit dem folgenden Befehl neu:

sudo service postgresql restart
Chirag Agrawal
quelle
3

Um dieses Problem zu beheben, können Sie dies versuchen.

Zuerst müssen Sie Ihre pg_hba.conf herausfinden und schreiben:

local all all md5

nach diesem Neustart pg Server:

postgresql restart

oder

sudo /etc/init.d/postgresql restart
uma
quelle
2

Für diejenigen, die diesen Fehler in DBeaver erhalten, wurde die Lösung hier in Zeile gefunden:

@lcustodio Legen Sie auf der SSL-Seite den SSL-Modus fest: require und lassen Sie entweder die SSL-Factory leer oder verwenden Sie die org.postgresql.ssl.NonValidatingFactory

Unter der Registerkarte Netzwerk -> SSL habe ich das Kontrollkästchen SLL verwenden aktiviert und Advance -> SSL Mode = require festgelegt. Jetzt funktioniert es.

Guy Lowe
quelle
1

Wenn Sie ein ähnliches Problem haben und versuchen, eine Verbindung zu einer lokalen Datenbank herzustellen, und versuchen Sie
con = psycopg2.connect(database="my_db", user="my_name", password="admin"), den zusätzlichen Parameter zu übergeben, hat mir Folgendes Folgendes erspart:
con = psycopg2.connect(database="my_db", user="my_name", password="admin", host="localhost")

Yauhen
quelle
Die Verwendung von 'local' hat mir auch den Tag gerettet! Der vollständige Hostname funktioniert remote, jedoch nicht lokal.
Dave
1

Wenn Sie einen Fehler wie den folgenden erhalten:

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

Fügen Sie dann einen Eintrag wie den folgenden mit Ihrer Mac-Adresse hinzu.

host   all    all       [your ipv6]/128         md5
Shiddu Mageppa
quelle
Mein Problem hing mit der IPV6-Adresse zusammen, daher wurde das Problem durch Hinzufügen meiner IPV6-Adresse behoben. Danke Shiddu
Phi
0

Überprüfen Sie auch die Variable PGHOST:

ECHO $ ​​PGHOST

um zu sehen, ob es mit dem lokalen Computernamen übereinstimmt

Lynx Kepler
quelle
0

Übrigens, in meinem Fall musste ich den Benutzer / pwd in der URL angeben, nicht als unabhängige Eigenschaften, sie wurden ignoriert und mein Betriebssystembenutzer wurde zum Herstellen einer Verbindung verwendet

Meine Konfiguration befindet sich in einer WebSphere 8.5.5-Datei 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>

Dies würde nicht funktionieren und bekam den Fehler:

<properties 
    user="fred"
    password="secret"
    url="jdbc:postgresql://server:port/mydb"/>
Florin D.
quelle
0

In meinem Fall habe ich gerade spring.postgresql.jdbc.url geändert , das IPV4 enthielt. Ich habe es in 127.0.0.1 geändert

Sobhan
quelle
-2

Überprüfen Sie den Hostnamen / die Adresse der Postgres-Verbindung in pgadmin und verwenden Sie diese in Ihrem Verbindungsparameter.

DBI connect ('database = messoLRdb; host = "behalte was erwähnt wird" ; port = 5433', 'postgres', ...)

Balaji
quelle
Willkommen bei Stack Overflow! Der Benutzer erwähnt niemals, dass er mit pgAdmin auf die Datenbank zugreifen kann.
Gustavo Kawamoto