Connexions
Introduction
PostgreSQL est un serveur de bases de données : il attend des connexions depuis des logiciels clients. Ces logiciels clients peuvent ouvrir une connexion vers le serveur selon deux méthodes : le protocole TCP/IP ou un socket UNIX. Avec les systèmes Windows ou lorsque le client est situé sur une machine hôte différente du serveur, seule la connexion par TCP/IP est possible.
Par convention, le numéro de port TCP utilisé par défaut est le numéro 5432. D’autres numéros de port peuvent être utilisés, selon la configuration du serveur.
Sessions
Une session, ouverte à partir de la connexion d’un logiciel client, ne concerne qu’une seule base de données dans le serveur et qu’un seul compte utilisateur. Ainsi, lorsqu’une application souhaite utiliser plusieurs bases de données, elle doit ouvrir d’autres connexions. De même, si une application souhaite ouvrir une session avec un autre compte utilisateur, une autre connexion doit être ouverte.
Une connexion entre un logiciel client et le serveur PostgreSQL nécessite l’existence de deux objets du côté du serveur : un compte utilisateur et une base de données. La première connexion peut s’effectuer avec un compte utilisateur et une base de données créée au moment de l’initialisation du groupe de bases de données.
Côté serveur (pg_hba.conf)
L’ouverture d’une connexion est contrôlée par PostgreSQL selon les règles d’un fichier de configuration : pg_hba.conf. Ce fichier, présent dans le répertoire du groupe de bases de données, contient des règles définissant les autorisations et restrictions d’accès, en fonction du nom d’utilisateur, de la base de données, de l’origine et de la méthode utilisée.
Chaque ligne du fichier correspond à une règle. Lors d’une tentative de connexion, PostgreSQL parcourt les règles et les compare avec les paramètres de la connexion afin de déterminer l’ouverture ou non de la connexion.
Une règle est composée de quatre à cinq éléments :
-
Le type...
Clients
Plusieurs outils destinés aux administrateurs de bases de données sont fournis, certains avec le serveur, d’autres comme des projets externes à PostgreSQL. Dans tous les cas, ces outils utilisent le même protocole client/serveur utilisé pour les applications. Ce protocole est implémenté par une bibliothèque fournie par PostgreSQL : libpq. Certains langages fournissent une implémentation native du protocole, par l’intermédaire d’un pilote, comme le pilote JDBC du langage Java.
1. Les options de connexions
Les options de connexions à une instance PostgreSQL sont communes à tous les clients, car elles dépendent en fait du protocole client/serveur. Ces options sont :
-
Le nom d’hôte ou l’adresse IP de l’instance PostgreSQL. Ce paramètre peut aussi être le chemin du socket Unix.
-
Le port TCP de l’instance PostgreSQL. La valeur par défaut est 5432.
-
Le nom de la base de données dans l’instance à laquelle on veut se connecter. En effet, on se connecte toujours à une base de données d’une instance, et non pas à une instance seule.
-
Le rôle interne à l’instance PostgreSQL.
Les options suivantes peuvent être utilisées pour ouvrir une connexion à un serveur :
-
-h nomhôte, --host nomhôte : indique le nom d’hôte ou l’adresse IP du serveur. Cette option permet donc de se connecter à un serveur distant, c’est-à-dire différent de l’hôte sur lequel est exécuté le client.
-
-p port, --port port : indique le port TCP sur lequel ouvrir la connexion. Ce port est donc le port utilisé par le serveur. Le port par défaut est 5432, mais une autre valeur peut être utilisée, selon la configuration du serveur.
-
-U nomutilisateur, --username nomutilisateur : indique le nom du rôle utilisé pour ouvrir la connexion.
-
-W, --password : indique au client de demander, de façon interactive, un mot de passe à l’utilisateur. Il est possible de stocker le mot de passe dans la variable d’environnement PGPASSWORD ou d’utiliser le fichier de mots de passe pour éviter d’avoir à taper le mot de passe.
-
-d <database> : indique la base de données à laquelle se connecter....
Droits d’accès
Le compte utilisateur créé initialement est un compte privilégié : il a tous les droits sur les objets (bases, tables, utilisateurs...) de l’instance. Il s’agit de l’administrateur du serveur, l’équivalent du compte root d’un système Unix. Le nom de ce compte dépend des options prises à l’installation et à l’initialisation de PostgreSQL et de l’instance. Ce compte a généralement pour nom postgres, comme le nom du compte utilisateur du système.
1. Gestion des rôles : utilisateurs et groupes
Un compte utilisateur est aussi appelé un rôle. Un rôle est un objet global, c’est-à-dire qu’il est valable pour toute l’instance. Un rôle a des droits sur des objets ; il permet d’ouvrir des connexions, fait partie d’autres rôles ou contient d’autres rôles. Un rôle recouvre les notions d’utilisateurs et de groupes.
La commande servant à créer des rôles est create role. Elle remplace les commandes create user et create group des versions précédentes (pour des raisons de compatibilité, ces commandes sont toujours disponibles).
Cette commande est également accessible depuis un programme client, createuser qui permet de créer des rôles depuis l’interpréteur de commande du système d’exploitation, par exemple dans un script.
Le synopsis de la commande SQL est le suivant :
CREATE ROLE nomrole [ [ WITH ] option [ ... ] ]
Le synopsis de la commande du système est :
[postgres]$ createuser [option...] [nomrole]
Les options sont les suivantes, avec l’option de la commande SQL suivie de l’équivalent pour la commande système.
-
LOGIN, -l : indique si le rôle peut se connecter au serveur. Le rôle devient l’équivalent d’un compte utilisateur.
-
CONNECTION LIMIT limite_connexion, -c number : indique le nombre maximum de connexions simultanées d’un rôle. La valeur par défaut (-1) ne met pas de limite.
-
[ ENCRYPTED | UNENCRYPTED ] PASSWORD ’motdepasse’, -P, -E, -N : définit le mot de passe d’un rôle. Les mots-clés ENCRYPTED, UNENCRYPTED indiquent si le mot de passe fourni doit être chiffré...