Projet de Base de données - smis

Transcription

Projet de Base de données - smis
Projet de Base de données IN206 - (à remettre par mail avant le 1er février 2017)
Documents et programmes exemples sur http://www-smis.inria.fr/~anciaux/ENSTA/IN206/5-projet
L'objectif du projet est de se familiariser avec des aspects importants pour le développement d'applications
utilisant des bases de données. Dans une première étape, vous devez construire un MCD permettant de
modéliser une base de gestion de médicaments. Dans une deuxième étape, vous réaliserez le MLD
correspondant; puis implanterez le MPD sous Oracle Express. Ensuite, vous insèrerez quelques données,
judicieusement choisies par rapport aux questions dont vous donnerez le texte SQL dans la partie 3. Dans
la partie 4, vous testerez l'appel d'une base de données depuis C. Pour cela, vous utiliserez le driver Oracle
OCILIB/OCI. Un exemple simple permettant de débuter est fourni dans le répertoire du cours. Sur la base
de cet exemple, il vous est demandé de réaliser une application simpliste. Enfin, vous tenterez de réaliser
une attaque par injection SQL sur l'application que vous aurez développé, montrant qu'une mauvaise
programmation peut générer des failles importantes, et protègerez votre programme contre cette attaque.
Partie 1 – Réalisation du MCD
Il faudra créer le MCD en se basant d'une part sur le (court) texte décrivant le contexte associé ainsi que
sur les questions Q1 à Q5 indiquées et qui seront utilisées dans la partie 3. Ainsi, le MCD créé devra
permettre de stocker les informations nécessaires pour pouvoir répondre à ces questions et, si possible,
pas plus. La création d'un MCD plus complexe est en général source d'erreurs. Dans tous les cas, vous
aurez au plus 7 entités ou associations au total. Il n'y a pas une seule bonne solution, tout comme, nous
l'avons vu en cours, il n'y a pas une seule bonne modélisation. La modélisation sera considérée correcte à
partir du moment où les choix sont justifiés et pertinents. Aussi, en cas de doute ou d'imprécision dans le
contexte, vous pourrez apportez toutes sortes de précisions, en les justifiant, dans le texte accompagnant le
MCD.
Gestion de stock de médicaments : Il s'agit de gérer le stock de médicaments dans un hôpital, les
prescriptions, les fournisseurs et les achats de médicaments. Dans les achats et les prescriptions, vous
aurez une propriété (attribut) donnant la quantité prescrite / achetée. On considérera que chaque
prescription ne concerne qu'un seul médicament.
Partie 2 – Réalisation du MLD et MPD
Utilisez les règles de transformation vues en cours et les règles de vérification et proposez un MLD
correspondant au MCD de la Partie 1. Si vous simplifiez le MLD, justifiez vos simplifications. Donnez le
texte SQL de création de la base (en le testant sur Oracle Express) en :
 choisissant le bon type pour chaque attribut;
 pensant à rajouter les contraintes de clé primaire (en les nommant);
 pensant à rajouter les contraintes d'intégrité référentielles (en les nommant).
Insérez un jeu de données permettant de tester les requêtes de la partie 3.
Partie 3 – Questions SQL
Donnez le texte SQL correspondant aux questions et vérifiez-les sur Oracle Express.
Q1 : Liste des médicaments de type antibiotique triés par ordre alphabétique
Q2 : Liste des médicaments fournis par le fournisseur "Alpha"
Q3 : Liste des achats de médicaments fabriqués par le fournisseur "Beta" triés par date
Q4 : Liste des médicaments jamais prescrits
Q5 : Pour chaque médicament, somme des quantités de médicaments prescrits
Q6 (Bonus) : Liste des médicaments à réapprovisionner, c'est-à-dire pour lesquels la somme des
quantités achetées est inférieure à la somme des quantités prescrites + 100 unités.
Partie 4 – Application
Sur le modèle de l'application TestDB (code fourni), construisez un petit programme qui :
 Se connecte à la base de données comme l’utilisateur «TP»
 Demande un login (saisi au clavier) et un mot de passe (saisi au clavier) et va vérifier dans une table
«Logins», créée préalablement dans Oracle, l'existence du couple login/password.
 Si le login/mot de passe existe, demande le nom d'un fournisseur et affiche l'ensemble des
informations relatives aux médicaments fournis par ce fournisseur.
Partie 5 – Attaque et correction
Réalisez des attaques par injection de code SQL sur votre petit programme.
 Injection SQL n°1: sans modifier le programme C, contournez le mécanisme d'authentification créé
dans la partie 1.
 Injection SQL n°2: sans modifier le programme C, récupérer le nom de tous les utilisateurs et leur mot
de passe
 Corrigez votre programme pour qu’il soit résistant à ces attaques.
Le rapport à rendre devra comprendre :


Un fichier (pdf) contenant:
o Le MCD, le MLD et le texte SQL de création (MPD)
o Le texte SQL des questions
o Une description des injections SQL réalisées et des mesures de protection apportées
Une archive contenant les sources de l'application, un fichier "readme" expliquant comment la lancer
dans la VM utilisée pour les TP, et un script SQL à lancer sur Oracle XE permettant de créer les
tables, d'insérer les données nécessaires pour lancer et tester l'application, et démontrant le bon
fonctionnement des requêtes SQL de la partie 3. Le code source de l’application devra contenir une
fonction "main" permettant de démontrer les fonctionnalités suivantes :
o Connexion avec le bon login/pwd, sélection d’un fournisseur
o Connexion avec un mauvais login/pwd
o Connexion sans login par injection SQL (injection SQL n°1)
o Affichage de la liste des utilisateur/mots de passe (injection SQL n°2)
o Protection les injection SQL n°1 et n°2
Remarques importantes :



Vous réaliserez le projet par binôme.
Chaque membre du binôme devra participer à l'ensemble des parties.
Les projets doivent être rendus sous format électronique au plus tard le 1er février 2017.