• Nenhum resultado encontrado

CAPÍTULO 3: REDES COMPLEXAS NA ANÁLISE DE ATLETAS EM CORRIDAS LIVRE E

3.5 C ONCLUSÕES

Chaque cluster de bases de donn´ees contient un ensemble d’utilisateurs. Ces utilisateurs sont diff´erents des utilisateurs g´er´es par le syst`eme d’exploitation sur lequel le serveur tourne. Les utili-sateurs poss`edent des objets de la base (par exemple des tables) et peuvent assigner des privil`eges sur ces objets `a d’autres utilisateurs pour contrˆoler qui a acc`es `a quel objet.

Ce chapitre d´ecrit comment cr´eer et g´erer des utilisateurs et introduit le syst`eme de privil`eges.

5.1 Utilisateurs de la base de donn´ ees

Conceptuellement, les utilisateurs de la base sont totalement s´epar´es des utilisateurs du syst`eme d’exploitation. En pratique, il peut ˆetre commode de maintenir une correspondance mais cela n’est pas requis. Le nom des utilisateurs est global `a toute une installation de cluster de bases de donn´ees (et non individuelle `a chaque base).

Pour cr´eer un utilisateur, utilisez la commande SQLCREATE USER: CREATE USER nom utilisateur ;

nom utilisateur suit les r`egles des identifiants SQL : soit sans guillemets et sans caract`eres sp´eciaux, soit entre double-guillemets.

Pour supprimer un utilisateur existant, utilisez la commande analogueDROP USER: DROP USER nom utilisateur ;

Deux programmes,createuseretdropuser, sont fournis comme emballage de ces commandes SQL et peuvent ˆetre appel´es depuis la ligne de commandes du shell :

createuser nom utilisateur dropuser nom utilisateur

Afin d’amorcer le syst`eme de base de donn´ees, un syst`eme r´ecemment install´e contient toujours un utilisateur pr´ed´efini. Cet utilisateur aura l’identifiant fixe 1, et par d´efaut (`a moins que cela ne soit modifi´e en lan¸cant la commande initdb) il aura le mˆeme nom que l’utilisateur du syst`eme d’exploitation qui a initialis´e le cluster de bases de donn´ees. Pour cr´eer plus d’utilisateurs, vous devez d’abord vous connecter en temps que cet utilisateur initial.

Une identit´e utilisatrice, et uniquement une, est active par connexion au serveur de bases de donn´ees. Le nom d’utilisateur `a employer pour une connexion `a une base particuli`ere est indiqu´e par le client initialisant la demande de connexion et ce, de la mani`ere qui lui est propre. Par exemple, le programme psql utilise l’option de ligne de commandes -U pour indiquer sous quel utilisateur il se connecte. Beaucoup d’applications (dontcreateuseretpsql) utilisent par d´efaut le nom courant de l’utilisateur du syst`eme d’exploitation. Par cons´equence, il peut ˆetre pratique de maintenir une correspondance de nommage entre les deux ensembles d’utilisateurs.

La configuration de l’authentification du client d´etermine avec quel utilisateur de la base, la connexion cliente donn´ee se connectera, comme cela est expliqu´e dans le chapitre 8. (Donc, un client n’est pas n´ecessairement oblig´e de se connecter avec le mˆeme nom d’utilisateur que celui qu’il a dans le syst`eme d’exploitation ; de la mˆeme mani`ere, une personne n’est pas contrainte de choisir, pour son nom de connexion, son vrai nom.) Comme l’identit´e de l’utilisateur d´etermine l’ensemble des privil`eges disponibles pour le client connect´e, il est important de configurer cela soigneusement quand un environnement multi-utilisateurs est mis en place.

5.2 Attributs des utilisateurs

Un utilisateur de bases de donn´ees peut avoir un certain nombre d’attributs qui d´efinissent ses privil`eges et interagissent avec le syst`eme d’authentification du client.

– super-utilisateur (superuser)

Un super-utilisateur d’une base passe au travers de toutes les v´erifications de permissions.

De plus, seul un utilisateur peut cr´eer de nouveaux utilisateurs. Pour cr´eer un super-utilisateur de la base de donn´ees, la commande est :

CREATE USER nom utilisateur CREATEUSER.

– Cr´eation de bases de donn´ees

Les permissions de cr´eation de bases doivent ˆetre explicitement donn´ees `a un utilisateur (`a l’exception des super-utilisateurs qui passent au travers de toutes v´erifications de permis-sions). Pour cr´eer un tel utilisateur, la commande est :

CREATE USER nom utilisateur CREATEDB.

– mot de passe

Un mot de passe est seulement significatif si la m´ethode d’authentification du client exige que le client fournisse un mot de passe quand il se connecte `a la base. Les m´ethodes d’au-thentification mot de passe, md5 et crypt utilisent les mots de passe. Les mots de passe de la base de donn´ees ne sont pas les mˆemes que ceux du syst`eme d’exploitation. Pour indiquer un mot de passe lors de la cr´eation d’un utilisateur utiliser la commande suivante :

CREATE USER nom utilisateur PASSWORD ’le mot de passe’.

Les attributs d’un utilisateur peuvent ˆetre modifi´es apr`es sa cr´eation avecALTER USER. Re-garder les pages de r´ef´erences deCREATE USERet de ALTER USERpour les d´etails.

Un utilisateur peut aussi configurer ses options par d´efaut pour de nombreux param`etres de configuration d´ecris dans la section 4.4. Par exemple, si pour une raison ou une autre vous voulez d´esactiver les parcours d’index (conseil : ce n’est pas une bonne id´ee) `a chaque fois que vous vous connectez, vous pouvez utiliser

ALTER USER nom utilisateur SET enable indexscan TO off ;

Cela sauvegarde les param`etres (mais ne les applique pas imm´ediatement) et dans les connexions ult´erieures, c’est comme siSET enable indexscan TO off ;avait ´et´e appel´e juste avant le d´emarrage de la session. Vous pouvez toujours modifier les param`etres durant la session. Pour d´evalider un des param`etres, la commande sera :

ALTER USER nom utilisateur RESET nom variable ;.

5.3 Les groupes

Comme dans Unix, les groupes sont une mani`ere logique de grouper les utilisateurs pour faciliter la gestion des privil`eges : les privil`eges peuvent ˆetre accord´es ou r´evoqu´es `a un groupe entier. Pour cr´eer un groupe, la commande est :

CREATE GROUP nom groupe ;

Pour rajouter ou supprimer des utilisateurs d’un groupe, la commande est : ALTER GROUP nom group ADD USER nom utilisateur 1, ... ;

ALTER GROUP nom group DROP USER nom utilisateur 1, ... ;

5.4 Les privil` eges

Quand un objet de base de donn´ees est cr´e´e, il est assign´e `a un propri´etaire. Le propri´etaire est l’utilisateur qui a ex´ecut´e l’instruction de cr´eation. Pour changer le propri´etaire d’une table, d’un index, d’une s´equence ou d’une vue, utilisez la commandeALTER TABLE. Par d´efaut, seul le propri´etaire (ou le super-utilisateur) peux faire n’importe quoi avec un objet. Afin de laisser les autres utilisateurs utiliser l’objet, des privil`eges doivent ˆetre accord´es.

Il existe diff´erents privil`eges : SELECT, INSERT, UPDATE, DELETE,RULE, REFERENCES, TRIGGER, CREATE,TEMPORARY,EXECUTE,USAGEetALL. Pour plus d’informations sur le support des diff´erents types de privil`eges par PostgreSQL, regardez la page de r´ef´erenceGRANT. Le droit de modifier ou de d´etruire un objet est toujours uniquement le privil`ege du propri´etaire. Pour assigner des privil`eges,

la commandeGRANT est utilis´ee. Ainsi, si joe est un utilisateur existant et accounts est une table existante, le privil`ege pour mettre `a jour la table peut ˆetre accord´e avec la commande :

GRANT UPDATE ON accounts TO joe ;

L’utilisateur qui ex´ecute cette commande doit ˆetre le propri´etaire de la table. Pour accorder un privil`ege `a un groupe, la commande est :

GRANT SELECT ON accounts TO GROUP staff ;

Le nom d’« utilisateur»sp´ecial PUBLICpeut ˆetre utilis´e pour accorder un privil`ege `a chaque utilisateur du syst`eme. EcrireALL`a la place d’un privil`ege sp´ecifique signifie que tous les privil`eges seront accord´es.

Pour r´evoquer un privil`ege, utilisez la commande nomm´eeREVOKE: REVOKE ALL ON accounts FROM PUBLIC ;

Les privil`eges sp´eciaux d’un propri´etaire d’une table (par exemple, les privil`egesDROP, GRANT, REVOKE, etc) sont toujours implicites et ne peuvent pas ˆetre accord´es ou r´evoqu´es. Mais le pro-pri´etaire d’une table peut choisir de r´evoquer ses propres privil`eges ordinaires, par exemple mettre une table en lecture seule pour lui-mˆeme aussi bien que pour les autres.

5.5 Fonctions et d´ eclencheurs (triggers)

Les fonctions et les d´eclencheurs autorisent `a l’int´erieur du serveur les utilisateurs `a ins´erer du code que d’autres utilisateurs ne connaissent pas mais peuvent ex´ecuter. Par cons´equent, les deux mechanismes permettent aux utilisateurs d’utiliser un«Cheval de Troie»contre d’autres avec une relative impunit´e. La seule protection r´eelle est d’effectuer un fort contrˆole sur ceux qui peuvent d´efinir des fonctions.

Les fonctions ´ecrites dans n’importe quel langage `a l’exception de SQL tourne `a l’int´erieur d’un processus d’arri`ere-plan du serveur, avec les permissions du syst`eme d’exploitation accord´es au processus d´emon du serveur de base de donn´ees. Il est alors possible de changer les structures de donn´ees internes du serveur `a partir de fonctions auxquelles il est fait confiance. Par cons´equence, de telles fonctions peuvent ´eviter tous les contrˆoles d’acc`es du syst`eme. Ceci est un probl`eme inh´erent `a la d´efinition de fonctions C par les utilisateurs.

Chapitre 6

Administration des bases de