Chapitre 17. Utilisateurs et droits de la base de données

Table des matières
17.1. Utilisateurs de la base de données
17.2. Attributs utilisateurs
17.3. Groupes
17.4. Droits
17.5. Fonctions et déclencheurs (triggers)

Chaque groupe de bases de données contient un ensemble d'utilisateurs. Ces utilisateurs sont différents des utilisateurs gérés par le système d'exploitation sur lequel le serveur tourne. Les utilisateurs possèdent des objets de la base (par exemple des tables) et peuvent affecter des droits sur ces objets à d'autres utilisateurs pour contrôler qui a accès à quel objet.

Ce chapitre décrit comment créer et gérer des utilisateurs et introduit le système de droits. Plus d'informations sur les différents types d'objets de la base de données et les effets des droits sont disponibles dans le Chapitre 5.

17.1. Utilisateurs de la base de données

Conceptuellement, les utilisateurs de la base sont totalement séparés des utilisateurs du système d'exploitation. En pratique, il peut être commode de maintenir une correspondance mais cela n'est pas requis. Le nom des utilisateurs est global à toute une installation de groupe de bases de données (et non individuelle pour chaque base). Pour créer un utilisateur, utilisez la commande SQL CREATE USER :

CREATE USER nom_utilisateur;

nom_utilisateur suit les règles des identifiants SQL : soit sans guillemets et sans caractères spéciaux, soit entre double-guillemets. Pour supprimer un utilisateur existant, utilisez la commande analogue DROP USER :

DROP USER nom_utilisateur;

Pour une certaine facilité d'utilisation, les programmes createuser et dropuser sont fournis comme emballage de ces commandes SQL et peuvent être appelés depuis la ligne de commande du shell :

createuser nom_utilisateur
dropuser nom_utilisateur

Pour déterminer l'ensemble des utilisateurs existants, examinez le catalogue système pg_user existant, par exemple

SELECT usename FROM pg_user;

La méta-commande \du du programme psql est aussi utile pour lister les utilisateurs existants.

Afin d'amorcer le système de base de données, un système récemment installé contient toujours un utilisateur prédéfini. Cet utilisateur aura l'identifiant fixe 1 et aura par défaut (à moins que cela ne soit modifié en lançant la commande initdb) le même nom que l'utilisateur du système d'exploitation qui a initialisé le groupe de bases de données. Pour créer plus d'utilisateurs, vous devez d'abord vous connecter en tant que cet utilisateur initial.

Une identité utilisateur, et uniquement une, est active par connexion au serveur de bases de données. Le nom d'utilisateur à employer pour une connexion à une base particulière est indiqué par le client initialisant la demande de connexion et ce, de la manière qui lui est propre. Par exemple, le programme psql utilise l'option de ligne de commandes -U pour préciser sous quel utilisateur il se connecte. Beaucoup d'applications (incluant createuser et psql) utilisent par défaut le nom courant de l'utilisateur du système d'exploitation. Par conséquence, il peut être pratique de maintenir une correspondance de nommage entre les deux ensembles d'utilisateurs.

La configuration de l'authentification du client détermine avec quel utilisateur de la base, la connexion cliente donnée se connectera, comme cela est expliqué dans le Chapitre 19. (Donc, un client n'est pas nécessairement obligé de se connecter avec le même nom d'utilisateur que celui qu'il a dans le système d'exploitation ; de la même façon que le nom de connexion d'un utilisateur peut ne pas correspondre à son vrai nom.) Comme l'identité de l'utilisateur détermine l'ensemble des droits disponibles pour le client connecté, il est important de configurer cela soigneusement quand un environnement multi-utilisateurs est mis en place.