Lorsque vous installez PostgreSQL, par défaut, la connexion à la base de données via TCP/IP n'est pas autorisée.
Lorsque vous essayez de vous connecter d'un client à une base de données PostgreSQL distante à l'aide de la commande psql, vous pouvez obtenir le message d'erreur « psql :impossible de se connecter au serveur :connexion refusée ».
Dans l'exemple suivant, à partir d'une machine cliente, nous essayons de nous connecter à une base de données PostgreSQL qui s'exécute sur le serveur 192.168.102.1. Comme vous le voyez dans la sortie, il est clairement indiqué que la base de données PostgreSQL distante n'accepte pas la connexion.
# 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?
Pour activer la connexion TCP/IP pour la base de données PostgreSQL, vous devez suivre les deux étapes mentionnées ci-dessous.
1. Modifiez pg_hba.conf pour ajouter l'enregistrement d'authentification client
Sur le serveur de base de données PostgreSQL, par défaut, vous remarquerez les enregistrements suivants vers la fin de /var/lib/pgsql/data/pg_hba.conf. Comme indiqué ci-dessous, il n'accepte que les connexions de l'hôte local.
# IPv4 local connections: host all all 127.0.0.1/32 trust # IPv6 local connections: host all all ::1/128 ident
Ajoutez la ligne suivante au serveur pg_hba.conf. Cela permettra la connexion à partir de l'adresse IP "192.168.101.20" (il s'agit du client dans notre exemple). Si vous souhaitez autoriser la connexion de plusieurs machines clientes sur un réseau spécifique, spécifiez ici l'adresse réseau au format d'adresse CIDR.
# vi /var/lib/pgsql/data/pg_hba.conf host all all 192.168.101.20/24 trust
Voici les différents formats d'enregistrement d'authentification client pris en charge dans le fichier pg_hba.conf. Nous utilisons le format #2 de cette liste.
- méthode d'authentification de l'utilisateur de la base de données locale [option d'authentification]
- utilisateur de la base de données hôte adresse CIDR méthode d'authentification [option d'authentification]
- méthode d'authentification de l'utilisateur de la base de données hostssl adresse CIDR [option d'authentification]
- hostnossl database user CIDR-address authentication-method [authentication-option]
Au lieu du format "adresse CIDR", vous pouvez également spécifier l'adresse IP et le masque de réseau dans des champs séparés en utilisant le format d'enregistrement suivant.
- adresse IP de l'utilisateur de la base de données hôte masque IP méthode d'authentification [option d'authentification]
- adresse IP de l'utilisateur de la base de données hostssl méthode d'authentification du masque IP [option d'authentification]
- adresse IP de l'utilisateur de la base de données hostnossl masque IP méthode d'authentification [option d'authentification]
2. Modifier l'adresse d'écoute dans postgresql.conf
Sur le serveur de base de données PostgreSQL, par défaut, l'adresse d'écoute sera localhost dans le fichier postgresql.conf comme indiqué ci-dessous.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = 'localhost'
Modifiez cette ligne et donnez *. Si vous avez plusieurs interfaces sur le serveur, vous pouvez également spécifier une interface spécifique à écouter.
# grep listen /var/lib/pgsql/data/postgresql.conf listen_addresses = '*'
3. Testez la connexion à distance
Maintenant, connectez-vous à la machine cliente 192.168.101.20 et effectuez la connexion à distance psql au serveur de base de données PostgreSQL (192.168.102.1) comme indiqué ci-dessous. Cette fois, ça devrait marcher.
# psql -U postgres -h 192.168.102.1 Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#
De plus, si vous ne souhaitez pas spécifier le nom d'hôte dans le paramètre de ligne de commande à chaque fois, vous pouvez configurer l'adresse IP de la base de données PostgreSQL distante dans le nom de la variable d'environnement PGHOST, comme indiqué ci-dessous.
# export PGHOST=192.168.102.1 # psql -U postgres Welcome to psql 8.1.11 (server 8.4.18), the PostgreSQL interactive terminal. postgres=#