Wenn Sie PostgreSQL installieren, ist standardmäßig keine Verbindung zur Datenbank über TCP/IP zulässig.
Wenn Sie versuchen, mit dem Befehl psql eine Verbindung von einem Client zu einer entfernten PostgreSQL-Datenbank herzustellen, erhalten Sie möglicherweise die Fehlermeldung „psql:konnte keine Verbindung zum Server herstellen:Verbindung abgelehnt“.
Im folgenden Beispiel versuchen wir, von einem Clientcomputer aus eine Verbindung zu einer PostgreSQL-Datenbank herzustellen, die auf dem Server 192.168.102.1 ausgeführt wird. Wie Sie der Ausgabe entnehmen können, heißt es eindeutig, dass die entfernte PostgreSQL-Datenbank keine Verbindung akzeptiert.
# psql -U postgres -h 192.168.102.1 psql: could not connect to server: Connection refused Is the server running on host "192.168.102.1" and accepting TCP/IP connections on port 5432?
Um die TCP/IP-Verbindung für die PostgreSQL-Datenbank zu aktivieren, müssen Sie die beiden unten aufgeführten Schritte ausführen.
1. Ändern Sie pg_hba.conf, um Client Authentication Record hinzuzufügen
Auf dem PostgreSQL-Datenbankserver werden Sie standardmäßig die folgenden Einträge am Ende von /var/lib/pgsql/data/pg_hba.conf bemerken. Wie unten angegeben, akzeptiert es nur Verbindungen vom localhost.
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 ident
Fügen Sie dem pg_hba.conf-Server die folgende Zeile hinzu. Dies ermöglicht die Verbindung von der IP-Adresse „192.168.101.20“ (in unserem Beispiel ist dies der Client). Wenn Sie Verbindungen von mehreren Client-Rechnern in einem bestimmten Netzwerk zulassen möchten, geben Sie hier die Netzwerkadresse im CIDR-Adressformat an.
# vi /var/lib/pgsql/data/pg_hba.conf host all all 192.168.101.20/24 trust
Im Folgenden werden verschiedene Client-Authentifizierungsdatensatzformate aufgeführt, die in der Datei pg_hba.conf unterstützt werden. Wir verwenden das #2-Format aus dieser Liste.
- lokale Datenbankbenutzer-Authentifizierungsmethode [Authentifizierungsoption]
- Hostdatenbankbenutzer CIDR-Adresse Authentifizierungsmethode [Authentifizierungsoption]
- hostssl-Datenbankbenutzer CIDR-Adresse Authentifizierungsmethode [Authentifizierungsoption]
- hostnossl-Datenbankbenutzer CIDR-Adresse Authentifizierungsmethode [Authentifizierungsoption]
Anstelle des Formats „CIDR-Adresse“ können Sie die IP-Adresse und die Netzwerkmaske auch in separaten Feldern angeben, indem Sie das folgende Datensatzformat verwenden.
- Hostdatenbankbenutzer IP-Adresse IP-Maske Authentifizierungsmethode [Authentifizierungsoption]
- Hostssl-Datenbankbenutzer IP-Adresse IP-Maske Authentifizierungsmethode [Authentifizierungsoption]
- Hostnossl-Datenbankbenutzer IP-Adresse IP-Maske Authentifizierungsmethode [Authentifizierungsoption]
2. Ändern Sie die Listen-Adresse in postgresql.conf
Auf dem PostgreSQL-Datenbankserver ist die Abhöradresse standardmäßig localhost in der postgresql.conf-Datei, wie unten gezeigt.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = 'localhost'
Ändern Sie diese Zeile und geben Sie *. Wenn Sie mehrere Schnittstellen auf dem Server haben, können Sie auch eine bestimmte zu überwachende Schnittstelle angeben.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = '*'
3. Testen Sie die Remote-Verbindung
Melden Sie sich nun beim Client-Computer 192.168.101.20 an und führen Sie die psql-Remoteverbindung zum PostgreSQL-Datenbankserver (192.168.102.1) wie unten gezeigt durch. Diesmal sollte es funktionieren.
# psql -U postgres -h 192.168.102.1 Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#
Wenn Sie den Hostnamen nicht jedes Mal im Befehlszeilenparameter angeben möchten, können Sie die IP-Adresse der entfernten PostgreSQL-Datenbank im PGHOST-Umgebungsvariablennamen wie unten gezeigt einrichten.
# export PGHOST=192.168.102.1 # psql -U postgres Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#