Vous êtes sur la page 1sur 4

Autoriser les connexions à un serveur PostgreSQL

Pour se connecter à une machine faisant tourner un serveur PostgreSQL depuis une machine
distante de mon réseau local, il y a 2 fichiers à modifier dans la configuration de PostgreSQL :
postgresql.conf et pg_hba.conf. En effet, toute connexion directe à la base de données depuis
l’extérieur devra d’abord être autorisée dans la configuration de PostgreSQL.

Schéma général de connexion depuis un client vers une machine distante

Étapes à suivre pour autoriser l’accès à distance à PostgreSQL

I. Créer des utilisateurs (rôles) et choisir les privilèges à leur accorder (sur le serveur PostgreSQL)
• Exemple de procédure :
1) création du rôle/utilisateur  : CREATE USER lect_stage WITH PASSWORD 'ulb';
2) droit d’accès (connexion) à une base de données : GRANT CONNECT ON DATABASE
remembrement TO lect_stage;
3) droit d’accès (à la requête select) à toutes les tables: GRANT SELECT ON ALL TABLES
IN SCHEMA public TO lect_stage ;

Pour plus d’information, voir : https://docs.postgresql.fr/9.5/sql-createrole.html


& https://docs.postgresql.fr/9.5/sql-grant.html

II. Modifier les fichiers de configuration pg_hba.conf et postgresql.conf (sur la machine du


serveur PostgreSQL dans système de fichier : /etc/postgresql/VERSION/main) pour autoriser des
clients distants à se connecter :
Notes  ! Faites au préalable une sauvegarde des fichiers initiaux (à renommer pg_hba._v0conf et
postgresql_v0.conf) !

II.A. Authentification des clients dans pg_hba.conf (ce fichier configure les autorisations pour les
bases de données du cluster)
• Ajouter une ligne du type :
(au niveau de #IPv4)
• Où
◦ le nom utilisateur est le nom de l'utilisateur (rôle) enregistré dans PostgreSQL et qui
doit être autorisé à accéder aux bases de données, pas seulement au serveur (par
exemple : lect_stage)
- all pour autoriser tous les utilisateurs
◦ l’adresse IP sera :
- celle du client tel que reconnu par le réseau (par exemple : 164.15.9.93)
- Notes ! 127.0.0.1 = localhost
- 0.0.0.0 pour accepter toute adresse IP
◦ Et le masque CIBR (netmask) vaudra :
- /32 pour n’autoriser qu’une seule connexion à la fois.
- Notes ! En mettant /32 on limite donc l'accès à l'adresse spécifiée, ce qui implique
qu’on soit sûr que cette adresse ne changera pas. Souvent les adresses IP sont ré-attribuées
par un serveur dans l'ordre où on les lui demande et elles peuvent donc changer, ce qui fait
qu'on préfère généralement mettre /24 (ainsi seuls les 3 premiers termes de l'IP seront
respectés) → moins ce nombre est grand moins la limite est stricte : /0 pour autant que
nécessaire (préférable si l’on veut pouvoir tester en local sans bloquer le client).
• Par exemple : host all all 164.15.9.93/0 md5
Cette ligne signifie que tous les utilisateurs qui se connectent au serveur à partir de
n'importe quelle adresse peuvent accéder à toutes les bases de données existantes sur ce serveur,
à condition, évidemment, que leur rôle (leur login dans le serveur de base de données) ait la
permission d'accéder à la base de données.
• Pourquoi "à partir de n'importe quelle adresse" ?
Le masque CIBR indique combien de bits sont figés dans l'adresse. Donc quand on met /0,
aucun bit n'est figé et on peut donc changer n'importe quel chiffre de l'adresse et toujours
avoir une adresse couverte par le mask.
Si veut limiter l'accès à une seule adresse, on doit utiliser le masque /32. Si on souhaite
donner accès à toutes les machines dont l'adresse commence par 164.15.9.* (donc
164.15.9.1 jusqu'à 164.15.9.255), alors on utilise le masque /24. Pour voir l'effet d'un
masque, vous pouvez utiliser un des calculateurs d'IP en ligne, comme par exemple:
http://www.hobbesworld.com/reseaux/calcip.php
Quand vous y entrez 164.15.9.93 et un masque de 0, vous verrez:
Première adresse disponible : 0.0.0.1
Dernière adresse disponible : 255.255.255.254
et avec un masque de 24:
Première adresse disponible : 164.15.9.1
Dernière adresse disponible : 164.15.9.254
Si toutes vos machines, y compris le serveur, sont dans un même réseau, le plus facile est
d'utiliser /24 puisque généralement c'est dans cette gamme que le serveur d'adresses
(DHCP) attribue les adresses. Par contre si votre serveur de bases de données n'est pas sur
ce même réseau, il est normal que votre connexion ne puisse pas fonctionner puisque quand
un ordinateur essaie de c connecter au serveur, celui-ci ne voit donc pas les adresses
164.15.9.*, mais l'adresse extérieure du gateway.
II.B. Connexions réseau dans postgresql.conf
A l’installation, PostgreSQL est configuré pour n’accepter que les connexions locales (c’est le
paramètre listen_adresses).
• Pour écouter toute adresse : listen_addresses = ‘*’ (sans # au début : il faut donc dé-
commenter ce paramètre et changer listen_adresses (par défaut sur localhost) par ‘*’ pour
que PostgreSQL écoute les connexions sur toutes les interfaces réseau du serveur)
• Si votre serveur a par exemple plusieurs interfaces réseau externes, vous pouvez demander à
PostgreSQL de ne se lier qu’à l'une d'entre elles, idem en appelant uniquement un des ports
du serveur. Exemple  pour une connexion (par le client) sur l'adresse 192.168.0.4 et locales,
port 5433 : listen addresses = ‘localhost, 192.168.0.4’ & port = 5433.
• Notes  ! Ce sont bien les adresses IP d’écoute qui sont à préciser, c'est-à-dire les adresses IP
du serveur sur lesquelles le serveur PostgreSQL va écouter. Si vous précisez une adresse IP,
cela signifie que PostgreSQL va écouter sur l'interface réseau de votre machine qui a cette
adresse IP. Si vous souhaitez n’autoriser les connexions qu’à une liste de machines ou
d'adresses IP clientes, c'est dans pg_hba.conf que vous pouvez le faire (cf.ci-dessus).
III. Relancer le serveur PostgreSQL, pour que les paramètres soient pris en compte (dans le terminal
en super-utilisateur, lancer) : sudo service postgresql restart

IV. Communiquer les informations de connexions aux personnes concernées (adresse IP du serveur
PostgreSQL, port, base de données, login/utilisateur, mot de passe).
→ Le client cré une nouvelle connexion dans PgAdmin vers le serveur distant PostgreSQL pour
accéder à la base de données autorisée via l’utilisateur et mot de passe requis (pour un accès par
méthode d’authentification md5 – par mot de passe crypté)

Plus de détails sur les modifications


→ Référez-vous au Chapitre IV.D. Autoriser les connexions (p: 21 pour la version 9.4) du guide
de démarrage rapide Postgresql dont le pdf est accessible à l'adresse suivante :
http://www.postgresqlfr.org/guidedemarragerapide

Et aux liens suivants pour explications plus détaillées sur les paramètres à configurer :
https://docs.postgresql.fr/9.5/runtime-config-connection.html
https://docs.postgresql.fr/9.5/client-authentication.html
Tips : 
1) Faites au préalable une sauvegarde de vos bases de données et fichiers de configuration initiaux !
2) Pour modifier les 2 fichiers il faut les ouvrir en superutilisateur dans un éditeur de texte.
3) Pour que les paramètres soient pris en compte, ne pas oublier de recharger la configuration de
PostgreSQL : tapez dans le Terminal sudo service postgresql restart
4) Pour connaître l'adresse IP de sa machine sur Linux-Mint (ou Ubuntu), clic-droit sur l'applet du
gestionnaire de connexion réseau et sélectionnez « Connexion Information »
ou tapez hostname -I dans le terminal. Notes ! Depuis la version 18.04 d'Ubuntu, ifconfig ne fait
plus partie d'Ubuntu. On utilisera, pour obtenir le même résultat, ip a (raccourci de ip address
show).
5) Attention à ne pas autoriser un utilisateur sur une base par erreur, nous vous conseillons de lire
cet article qui aborde le problème de la gestion des droits d'accès à une base de données :
http://cyberzoide.developpez.com/securite/privileges-base-de-donnees/

Vous aimerez peut-être aussi