Postgresql : gestion multi-utilisateurs Gestion des Droits Rôle de Connexion Rôle de Groupe Appartient Objets A des droits sur { Tables Vues Les Rôles Un rôle correspond à un utilisateur et/ou à un groupe. Un rôle a des droits et il peut être membre d'un ou plusieurs autres rôles. Le concept des utilisateurs et des groupes est facile à appréhender. Malheureusement, il ne donne pas beaucoup de liberté dans son utilisation. Un utilisateur fait partie d'un ou plusieurs groupes. Il hérite en cela des droits de ces groupes. À partir du moment où un utilisateur fait partie d'un groupe, il dispose des droits de ce groupe. Il lui est impossible de masquer les droits du groupe pour ne voir que les siens. Il lui est aussi impossible de masquer ses droits par ceux du groupe. Les rôles permettent tout cela. À sa création, un rôle peut avoir plusieurs options : • • • • login createdb createrole superuser le rôle est autorisé à se connecter sur une base le rôle est autorisé à créer une base de données le rôle est autorisé à créer un autre rôle le rôle a tous les droits car il est un superutilisateur Un rôle pouvant créer un autre rôle n'est pas forcément un superutilisateur. Pour qu'un rôle soit superutilisateur, il doit avoir été créé avec l'option superuser par un superutilisateur. Il est donc possible de nommer un administrateur, chargé de la création des bases et des rôles, qui ne soit pas le maître absolu du SGBD. Certes, il pourra créer des bases mais cela ne lui donnera pas le droit de supprimer objets et données dans cette base (en supposant qu'un autre rôle soit le propriétaire de la base). Les rôles sont définis pour l'ensemble des bases de données. Par il existe un rôle « postgres » à qui est attribué le droit « superutilisateur ». © Jacques Chambon 1/7 Postgresql : gestion multi-utilisateurs Vision Interface PgAdmin Pour créer un rôle avec l'interface, il suffit de sélectionner l'objet, de cliquer bouton droit de la souris, et de sélectionner la commande « ajouter un rôle ». Première étape : ajouter un Deuxième étape : ajouter un Troisième étape : groupe utilisateur l'utilisateur au groupe. affecter Vision SQL Création des Rôles de connexion CREATE ROLE "dupont" LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE ROLE "durant" LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE ROLE "duchmuc" LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE ROLE "dudule" LOGIN NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; Création des Rôles de groupe CREATE ROLE "Acheteur" NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE ROLE "Cadastre" NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE ROLE "Cadastre_centre" NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE ROLE "Cadastre_fleuve" NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; CREATE ROLE "Service_Technique" NOSUPERUSER INHERIT NOCREATEDB NOCREATEROLE; Affectation des Rôles de connexion aux rôles de groupe GRANT "Acheteur" TO "dupont"; GRANT "Cadastre_fleuve" TO "durant"; GRANT "Cadastre_centre" TO "duchmuc"; GRANT "Service_Technique" TO "dudule"; Les VUES (Views) Les vues sont dérivées des tables, contrairement à une table, une vue ne contient pas de données, elle n'a pas d'existence permanente. Elle ne peut donc être utilisée pour réaliser des mises à jour ou © Jacques Chambon 2/7 Postgresql : gestion multi-utilisateurs des destructions de données. Chaque fois qu'une vue est utilisée dans une requête, la table correspondant a cette vue est créée. Une vue ne correspond pas obligatoirement à une table dans sa totalité. Elle peut être composée d'éléments d'une tables ( par projection ou sélection) ou de plusieurs tables ( par jointure). En général on crée une vue pour deux raisons: • Afin de réaliser des accès restreints. L'utilisateur ne voit qu'une partie des données de la table dont est issue la vue. • Améliorer l'interface utilisateur en construisant des vues qui sont des jointures entre plusieurs tables. Par exemple on renseigne une table issue d'une association en insérant les libellés correspondant aux clés présentes dans la table "association" Création de vues Avec contrôle dépendant du contenant : mode Sélection Nous allons créer la Vue « Luminaire_fleuve_vue », qui permettra la restriction associée au salarié « Durant ». Pour créer une vue il faut cliquer Il faut commencer par donner un nom et préciser le bouton droit sur la rubrique Vue. propriétaire dans dans l'onglet « Propriétés ». Choisir « Ajouter une vue » Définir ensuite la requête correspondant à la vue adéquate. La dernière étape consiste à déterminer les droits d'accès sur cette vue. Le propriétaire a tous les droits : l'interface le détermine automatiquement. Il suffit d'ajouter que le rôle « Cadastre fleuve » disponible dans la liste déroulante, aura le droit SELECT (cochez la zone correspondante) et valider en cliquant sur le bouton « Ajou/Modif) Validation générale par le bouton OK Avec contrôle dépendant du contenant : mode Projection Dans l'exemple proposé, des attributs de service ont été ajoutés à certaines tables. C'est le cas pour la table « changer » dont la colonne offset_ n'est qu'une colonne de service. La vue « changer_vue » ne présentera aux utilisateurs que les trois premières colonnes. Syntaxe SQL CREATE OR REPLACE VIEW changer_vue AS SELECT changer.cha_date, changer.lum_code_, changer.amp_numero FROM changer; © Jacques Chambon 3/7 Postgresql : gestion multi-utilisateurs ALTER TABLE changer_vue OWNER TO postgres; GRANT ALL ON TABLE changer_vue TO postgres; GRANT SELECT ON TABLE changer_vue TO public; Test des connexions Le test de la connexion se fait au niveau du middleware dans lequel on précise le nom de connexion de l'utilisateur et son mot de passe associé. Vision ODBC C'est à partir des outils d'administration / Source de Données ODBC, que se configure la liaison middleware. Il est important de préciser le user name et le Password. Cette liaison doit être configurée sur le poste de travail de Durant. C'est une vision « poste à poste » de l'usage d'un poste de travail. Un poste de travail est associé à un seul utilisateur. Dans Access, il faut ensuite utiliser la commande « Fichier / Données externes / Lier des tables» pour accéder aux données via ODBC. Seules les tables autorisées pourront être ouvertes par Durant. Si vous établissez un lien avec la table Type_ampoule, cette liaison apparaîtra, mais une tentative de lecture se traduira par un échec. La requête suivante pourra alors être réalisée, afin d'offrir à Durant une vision globale sur les luminaires présents dans sa zone de compétence. Remarques : 1 - l'attribut « offset_ » n'apparaît pas dans la « table » luminaire_fleuve. © Jacques Chambon 4/7 Postgresql : gestion multi-utilisateurs 2 - cette vision en lecture seule pourrait être remplacée par une Vue au niveau de la base de données. Dans la base proposée en exemple, une vue a été créée pour avoir la liste des Luminaires des secteurs 3 et 4. Vision JDBC Avec OoBase il faut créer une nouvelle base de Données en utilisant une connexion JDBC. Les étapes sont les suivantes : Dans la première ligne suivante, il faut indiquer le nom ou l'adresse du serveur et le nom de la base. Attention, dans l'environnement Open office la casse a son importance! Localhost désigne la machine locale. Il faut ensuite donner le nom et le mot de passe de l'utilisateur définit dans la base de Données © Jacques Chambon 5/7 Postgresql : gestion multi-utilisateurs testez la connexion en frappant le mot de passe attendu Enregistrez l'environnement requêteur local et ouvrez la « base » en suivant La liaison est immédiate On visualise alors tous les objets disponibles dans la Base de Données, mais le contenu des seuls objets autorisés pourra être affiché. © Jacques Chambon 6/7 Postgresql : gestion multi-utilisateurs Avec OoCalc, il suffit d'appuyer sur la touche F4 pour obtenir la liste de toutes les connexions établies avec les différentes bases du sytème d'informations. L'usage de l'icône « Copier » permet de faire « descendre les données » dans la partie tableur. © Jacques Chambon 7/7