ADMIN SGBD TP 1 Préliminaires L'objectif de ce TP est de: installer l environnement (PostgreSQL, base, tables), créer des utilisateurs, des vues, et de gérer les privilèges, créer des triggers, utiliser des paramètres d'initialisation. Il faut installer PostgreSQL. Voici une liste de commandes utiles pour la suite du TP. Description Commande Aide SQL \h Aide sur les commandes \ \? Description d une table Redirection sortie Exécution d un script Nom, type et propriétaire des tables dans la base \d nomtable \o nomfichier \i nomfichier \d Quitter PostgreSQL \q Charger la table PAYS grâce au fichier pays.sql. Dictionnaire des données 1.1 Combien d index sont définis sur la table PAYS? 1.2 Y-a-t-il une création d index dans le fichier pays.sql? Pourquoi PostgreSQL crée-t-il un index? 1.3 Créer un second index sur le champ PAYS.population en utilisant SQL. Donner la requête qui permet de vérifier que l index a été crée et ses propriétés. 1.4 Exécuter l instruction SQL suivante: ANALYZE Pays; 1.5 Écrire les commandes qui permettent d analyser la table PAYS, et d afficher le nombre de n- uplets et de pages utilisés par la table PAYS (on pourra s intéresser à la table pg_class). 1.6 Comment donneriez-vous la liste des vues systèmes? 1.7 En utilisant une des vues obtenue ci-dessus, donner les statistiques de chaque champ de la table PAYS. Quel est l attribut qui permet de connaître le nombre de valeurs différentes dans PAYS? 1.8 Toujours en utilisant une vue système, donner les informations concernant les index de la table PAYS. Utilisateurs, vues et autorisations 2.1 Créer deux autres utilisateurs. Vous leur donnerez un nom, et vous indiquerez qui est l utilisateur A (vous), l utilisateur B, et l utilisateur C. 2.2 Créer les tables FILM, ACTEUR, et CASTING en utilisant les fichiers film.sql, acteur.sql, et casting.sql.
2.3 Donner la commande qui permet de créer un groupe TP1 qui regroupe les trois utilisateurs. Donner la commande qui vous permet de lister les utilisateurs appartenant à un groupe donné. 2.4 Dans PostgreSQL, on peut affecter 5 types de droit à un utilisateur ou à un groupe (r pour SELECT, a pour INSERT, w pour UPDATE, d pour DELETE, x pour REFERENCES, R pour les RULE, t pour les trigger, C pour CREATE, X pour EXECUTE, U pour USAGE, et all pour posséder rawdxtcxur). Quelle commande utilisez-vous pour créer une vue FILM_VUE sur la table FILM, et pour accorder sur cette vue les droits de lecture au groupe que vous avez créé en 2.3? On vérifiera les droits à l aide de la commande \z FILM. 2.5 Ouvrir trois terminaux simulant les trois utilisateurs. 2.6 Créer les tables suivantes sous le compte de l utilisateur A: XX désigne les initiales de votre prénom et votre nom. Par exemple, Jean Martin créera les tables FILMJM, ACTEURJM, et CAS- TINGJM. CREATE TABLE acteurxx (id INTEGER NOT NULL, nom VARCHAR(35), PRIMARY KEY (id)); CREATE TABLE filmxx (id INTEGER NOT NULL, titre VARCHAR(70), annee DECIMAL(4), note FLOAT, votes INTEGER, realisateur INTEGER, PRIMARY KEY (id)); CREATE TABLE castingxx ( filmid INTEGER NOT NULL, acteurid INTEGER NOT NULL, ord INTEGER, PRIMARY KEY (filmid, acteurid), FOREIGN KEY (filmid) REFERENCES filmxx(id), FOREIGN KEY (acteurid) REFERENCES acteurxx(id)); Insérer les données suivantes dans FILMXX (inutile de peupler les autres tables). INSERT INTO filmxx SELECT * FROM film WHERE annee > 1997; COMMIT; On suppose que vous êtes l utilisateur A. Donner les instructions SQL permettant de répondre aux questions suivantes: 2.6.1" l utilisateur A donne les droits à l utilisateur B d accèder à toutes les informations concernant les films réalisés en 2001 et 2002. 2.6.2" l utilisateur A donne les droits aux utilisateurs B et C pour qu ils puissent accèder à toutes les informations concernant les films réalisés en 2003. 2.6.3" l utilisateur A autorise l utilisateur B à rechercher, supprimer ou mettre à jour les informations de la table FILM excepté la note. 2.6.4" l utilisateur A autorise l utilisateur B à rechercher et insérer toutes les informations concernant un film, et à transmettre ses droits aux autres utilisateurs. Par exemple, quelle est la commande qui lui permet à B de donner ses droits à l utilisateur C? L utilisateur A (vous) annule les droits de l utilisateur B. Que se passe-t-il pour C? 2.6.5" l utilisateur A autorise l utilisateur B à rechercher et insérer toutes les informations concernant un film, et à transmettre ses droits. L utilisateur B donne ses privilèges à l utilisateur C en lui permettant de transmettre ses droits. Ainsi, l utilisateur C accorde ses privilèges à l utilisateur B. Maintenant, l utilisateur A (vous) annule tous les privilèges à l utilisateur B. B peut-il encore insérer des films dans FILMXX?
Triggers On va utiliser la table FILMXX de l exercice précédent. 1. Création des triggers On suppose que FILMXX est une table importante, et on souhaite surveiller son utilisation, et en particulier les modifications sur la note (INSERT, DELETE, UPDATE). On va créer en premier lieu une table FILM_AUDIT. create table film_audit (! quand date,! utilisateur varchar(10),! action varchar(10),! filmid float(15),! anc_note float(15),! nouv_note float(15) ); Donner ensuite le code SQL des trois règles permettant de surveiller les modifications de FILM.note, et de placer les informations dans la table FILM_AUDIT. Conseils: on utilisera la création de règle de PostgreSQL (CREATE RULE). on utilisera les fonctions now() et user() pour connaître l instant et l utilisateur. on utilisera les valeurs old.att et new.att pour référencer les anciennes et nouvelles valeurs d un attribut att. 2. Test des triggers On travaillera avec un utilisateur créé précédemment. On lui donnera les droits de modification sur la table FILMXX. Quelles sont les commandes nécessaires pour voir les traces des modifications de l attribut note. On donnera le contenu de la table FILM_AUDIT après quelques tests que vous expliciterez. Configuration de base 1. Installation Une fois PostgreSQL compilé et installé, vous devez créer un compte postgres. Sous ce compte, il faut créer la base dont vous allez vous servir. [galibier]# su - postgres bash$ createdb asrall Ensuite, vous démarrez la base: pg_ctl -D /usr/local/pgsql/data start Vous vous connectez à une session postgresql psql -d asrall -U postgres Vous créez votre compte utilisateur: create user olivier with password toto ; Puis vous vous connectez en tant qu utilisateur: psql -d asrall -U olivier 2. Configuration des accès PostgreSQL permet aux administrateurs de contrôler lees accès à la base. Les accès peuvent être autorisés étant donnés une base, un utilisateur, ou une adresse TCP/IP. Par défaut, PostgreSQL autorise uniquement l accès aux utilisateurs connectés à l ordinateur qui exécute le serveur. Pour activer l accès réseau, vous devez démarrer le serveur (postmaster) avec l option -i.
Les accès sont contrôlés grâce au fichier data/pg_hba.conf. Ce fichier contient plusieurs types de configuration: Local Les entrées locales contrôlent les accès pour les utilisateurs connectés sur la machine du serveur. Les options sont: trust, password, crypt, et reject. L option trust permet aux utilisateurs connecté à la machine de se connecter au serveur, l option password nécessite un mot de passe, l option crypt est équivalent à password mais le mot de passe est crypté, et reject rejète toutes les connexions à la base. Un exemple: local! all!!! trust host! all! 127.0.0.1! 255.255.255.255! trust Host et Hostssl Ces deux options permettent de contrôler les accès TCP/IP. On a les mêmes options que Local, plus les trois suivantes: ident pour utiliser un ident distant pour l authentification, krb4 pour utiliser une authentification Kerberos 4, et krb5 pour une authentification Kerberos 5. Ces options sont activées uniquement si l option -i a été utilisée lors du lancement de postmater. Un exemple: host! all! 192.168.34.0! 255.255.255.255! crypt host! ventes! 192.168.7.12! 255.255.255.255! ident Gestion personnalisée Par défaut, les mots de passe utilisés par password et crypt sont stockés dans la table pg_shadow. On peut éventuellement avec password surchager le mot de passe de pg_shadow. Par exemple: host! all! 192.168.34.0! 255.255.255.255! password mdprel utilise la relation mdprel pour authentifier les utilisateurs. Divers On peut fixer le nombre maximal de connexions grâce à la variable max_connections. On peut fixer un timeout pour la durée dédiée à l authentification d un utilisateur grâce à la variable authentification_timeout. 3. Arrêt du serveur On arrête le serveur proprement grâce à la commande: pg_ctl -D /usr/local/pgsql/data stop -m fast 4. Backup de la base Pour sauvegarder la base, on peut arrêter le serveur, et copier les fichiers du répertoire data/ afin de les dupliquer. On peut également sauvegarder une base active grâce à la commande pg_dumpall (pour toutes les bases), ou pg_dump (pour une base donnée). Les fichiers de configuration (comme pg_hba.conf par exemple) ne sont pas sauvegardés, donc il faut veiller à les inclure dans la sauvegarde. Par exemple, pour sauvegarder la base test, on écrira: pg_dump test > /tmp/test.dump. Pour restaurer la base, on utilisera les commandes suivantes: createdb newtest psql newtest > /tmp/test.dump
5. Surveillance Pour surveiller un serveur PostgreSQL, on peut utiliser l option -o de postmaster (cf prochaine séance). On peut également analyser les informations liées aux processus postgres et postmaster. Par exemple, un ps sur le processus postgres donnera des informations sur la charge du processeur, l utilisation de la mémoire, le temps d exécution, Par exemple, sur un système Unix, on peut avoir les informations suivantes: USER PID %CPU TIME STARTED VSZ INBLK OUBLK COMMAND postgres 18923 45.4 0:27.79 1:15PM 2140 34 1 /usr/local/postgres/ Cela signifie que le processus postgres utilise 45,4% du CPU, a utilisé 27 secondes du CPU, a démarré à 13h15, a lu 34 blocs (pages), et a écrit 1 bloc (page). Même si les informations sont moins complètes que celles pouvant être obtenues avec les outils d analyse de PostgreSQL, cela donne déjà une base d informations intéressantes.