Bonjour
Je vais bientôt devoir réaliser un travail de diplôme, qui portera sur la connexion sur plusieurs bases de données oracle à partir de php.
Je n'ai pas encore la donnée définitive, je la posterai dès que possible. Durant ce travail de diplome, j'ai le droit de demander de l'aide ou je veux, mais j'aimerais mieux des indices que des solutions toute faite (car je devrai défendre mon truc lors d'une présentation et tout le tralala).
--------------------------------------------------------
Travail fourni (mis à jour régulièrement)
1. Donnée du projet
Sujet :
Le travail consiste à élaborer une application Web nommée O'Viewer. Cette dernière permettra à un utilisateur d'accéder librement à certaines parties du dictionnaire Oracle.
Pré-acquis :
Avoir des notions de PHP, installé Apache, PHP, et déjà interfacé une base de données Oracle.
Environnement de développement :
Un PC en configuration standard de <entreprise>, WIN2000, EasyPHP.
Exigences fonctionnelles :
L'administrateur de l'application pourra, après identification:
- Ajouter / Supprimer des requêtes (sur le dictionnaire Oracle) qui seront mises à disposition des utilisateurs.
- Ajouter / Supprimer l'accès à une base de données pour les utilisateurs.
- Tester le fonctionnement d'une requête mise à disposition d'un utilisateur.
L'utilisateur pourra librement et sans identification, accéder à toutes les requêtes / instances définies par l'administrateur. Le résultat sera donné sous forme d'un tableau.
Il faudra également mettre en place, au niveau Oracle, la structure et les objets permettant de satisfaire au concept de sécurité décrit plus loin.
Exigences de l'interface utilisateur :
Le résultat des requêtes donné sous forme de tableau sera complètement dynamique, puisque les colonnes correspondantes aux requêtes ne seront pas connues à l'avance.
Les bases de données à disposition ainsi que les requêtes disponibles seront présentées à l'utilisateur sous forme de listes déroulantes. Une seule base et une seule requête pourront être choisies à la fois.
Exigences de qualité :
Afin que l?intégration de l?application O'Viewer dans un site existant soit facile, toutes les mises en forme et mises en pages doivent être réalisées dans un fichier CSS.
Le rapport devra décrire et expliquer brièvement le concept de sécurité (fonctionnement DB-link privé / vue)
Concept de sécurité :
- On distingue deux catégories de base de données : La base d?entrée qui est le point d?entré du système, et les bases de travail, sur lesquelles les utilisateurs veulent avoir les informations du dictionnaire.
- L?utilisateur générique OV_USER et l?administrateur OV_ADMIN ne se connectent, via l?application, que sur la base d?entrée, prévue à cet effet. C?est uniquement sur cette base que l?administrateur OV_ADMIN pourra créer des objets.
- Les bases de travail sont reliées à la base d?entrée par des db-links privés appartenant à OV_ADMIN.
- Seul l?administrateur a les droits de connexion, et de consultation du dictionnaire, sur les bases de travail.
- L?utilisateur générique OV_USER ne pourra consulter les bases de travail qu?au travers de vues, mises à disposition par OV_ADMIN sur la base d?entrée.
- Lors de la mise à disposition d'une nouvelle base de données, il faudra manuellement sur celle-ci créer le user OV_ADMIN et lui donner les droits nécessaires. (Niveau DBA)
2. Planning du projet
3. Journal de travail
Je mets dans cette partie tout ce que j'ai fais, les problèmes rencontrés, l'aide recue, etc.
4. Réalisation du projet
Le projet a été séparé en différentes phases, s?inspirant de la méthodologie de travail RUP. Ces différentes phases décrivent une partie du projet. Le détail des phases sera expliqué dans les points ci-dessous, mais voici tout d?abord un résumé succinct de ces différentes phases, dans le cadre de ce projet :
Initialisation : Définit « ce que l?on va réaliser »
Elaboration : Définit « comment va-t-on le réaliser »
Construction : La réalisation proprement dite (code)
Transition : Documentation technique et utilisateur en vue du déploiement
4.1. Initialisation
Cette phase a été réalisée en pré acquis du projet. (à rédiger)
4.2. Elaboration
4.2.1. Architecture logicielle et matérielle
Cette dernière a été définie dans le cahier des charges par le supérieur professionnel. L?application O?Viewer réalisée en PHP communiquera avec la base d?entrée par l?intermédiaire des utilisateurs OV_ADMIN et OV_USER. Ces derniers pourront accéder aux bases de travail par l?intermédiaire de vues et de DB_LINK. Ce processus sera plus amplement expliqué dans le chapitre sur les concepts de sécurité.
Dans le cadre du projet, l?application O?Viewer et la base d?entrée se trouvent sur deux serveurs différents. Les bases de travail peuvent être sur le serveur de la base d?entrée ou d?autres serveurs.
4.2.2. Acteurs
Pour ce projet nous aurons trois acteurs, l?utilisateur normal, l?utilisateur administrateur et le DBA.
Utilisateur normal :
? Accès au formulaire des requêtes sur les différentes instances
? Exécution d?une requête sur une instance choisie
? Accès au résultat d?une requête
Utilisateur administrateur :
? Mêmes actions que l?utilisateur normal
? Ajout/suppression de requêtes sur chaque instance
? Ajout/suppression d?accès à une base de données
? Création d?utilisateur sur une instance
DBA (DataBase Administrator)
? Créé les utilisateurs sur les bases de travail
4.2.3. vue d'ensemble des cas d'utilisation
4.2.4. Détails des cas d?utilisation
UC#1 ? choixRequete
Description Accès aux formulaires des requêtes sur les différences instances
Acteur(s) abilité(s) Normal, administrateur
Pré-conditions Ouverture de l?interface web
Détails Page par défaut de l?application web
Exceptions Aucune
Notes -
Variantes -
UC#2 - executionRequete
Description Exécution d?une requête sur les différentes instances proposées
Acteur(s) abilité(s) Normal, administrateur
Pré-conditions UC#1
Détails ? Choisir une instance dans le menu déroulant
? Cliquer sur le bouton Suivant
? Choisir une requête dans le menu déroulant
? Cliquer sur le bouton exécuter
Exceptions Message d?erreur si l?instance ou la requête n?est pas sélectionnée
Message d?erreur si l?instance n?est pas disponible
Message d?erreur si la requête n?est pas réalisable
Message d?avertissement si aucune instance n?est disponible
Message d?avertissement si aucune requête n?est disponible
Notes -
Variantes -
UC#3 ? resultatRequete
Description Accès au résultat d?une requête
Acteur(s) abilité(s) Normal, administrateur
Pré-conditions UC#1, UC#2
Détails Le résultat de la requête est disponible sous forme de tableau dynamique
Exceptions Aucune
Notes -
Variantes Pour l?administrateur, le chemin suivant peut être employé :
? UC#1
? UC#4
? Cliquer sur une instance
? Cliquer sur le bouton Exécuter correspondant à la requête
UC#4 ? login
Description Login administrateur
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#1
Détails ? Entrer le nom d?utilisateur
? Entrer le mot de passe
? Cliquer sur le bouton Valider
? Un nouveau menu apparaît
Exceptions Message d?erreur si le nom d?utilisateur ou le mot de passe n?est pas valide
Notes -
Variantes -
UC#5 ? ajoutInstance
Description Ajout d?une instance
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#4, UC#9
Détails ? Entrer le nom de l?instance à ajouter
? Cliquer sur le bouton Ajouter
Exceptions Message d?erreur si le nom d?instance contient des caractères non alpha-numériques
Notes -
Variantes -
UC#6 ? suppressionInstance
Description Suppression d?une instance
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#4
Détails ? Cliquer sur le bouton Supprimer correspondant à l?instance
Exceptions Avertissement si aucune base n?est disponible
Notes Le UC#9 doit être réalisé à la suite de ce cas d?utilisation
Variantes -
UC#7 ? ajoutRequete
Description Ajout d?une requête pour une instance
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#4
Détails ? Cliquer sur l?instance où la requête sera ajoutée
? Entrer la requête
? Cliquer sur le bouton Valider
Exceptions Message d?erreur si la requête est invalide
Notes -
Variantes -
UC#8 ? suppressionRequete
Description Ajout d?une requête pour une instance
Acteur(s) abilité(s) Administrateur
Pré-conditions UC#4
Détails ? Cliquer sur l?instance où la requête sera supprimée
? Cliquer sur le bouton Supprimer correspondant à l?instance
Exceptions Aucune
Notes -
Variantes -
UC#9 ? ajoutsupprUser
Description Ajout ou suppression de l?utilisateur OV_ADMIN sur une base de travail
Acteur(s) abilité(s) DBA
Pré-conditions Ouverture du client Oracle
Détails ? Réaliser la requête d?ajout ou de suppression de l?utilisateur
? Si ajout, donner les droits à l?utilisateur
Exceptions Aucune
Notes -
Variantes -
4.2.5. Modèle des données
Deux variantes se sont présentées concernant le modèle des données. La première était de ne pas réaliser de tables et d?afficher les vues et instances disponibles d?après les vues du dictionnaire d?Oracle (all_db_links et all_views). La deuxième de créer une ou plusieurs tables contenant ces informations.
La première solution présentait deux problèmes. Lorsque l?utilisateur administrateur créé une instance, le DB-LINK va être créé puis testé, et s?il ne fonctionne pas (dans le cas ou l?utilisateur n?a pas été créé sur la base de travail), il sera supprimé. Si l?utilisateur normal arrive au moment où le DB-LINK est créé mais non valide, il pourra tout de même l?utiliser et ceci amènera un message d?erreur. Le deuxième problème était qu?il aurait été plus convivial pour l?utilisateur normal de voir un titre des requêtes lors de la sélection (« Sélection des vues DBA » au lieu de la requête SQL correspondante par exemple). Cette information n?étant pas stockée dans le dictionnaire, il fallait l?entreposer autre part.
Pour ces raisons je me suis donc orientée vers la première solution, en créant deux tables. Voici le modèle des données :
Notons que ces tables seront présentes sur le base d?entrée et créée par l?utilisateur OV_ADMIN. Les bases de travail ne contiendront pas de données relatives à ce projet.
4.2.6. Concept de sécurité
Protection du login administrateur :
Sur les pages dédiés à l?administrateur, un contrôle d?authentification de session devra être mis en place afin que l?on ne puisse pas accéder aux pages réservées.
Protection des bases de données Oracle :
Afin que l?accès aux données des tables de travail soit disponible à l?utilisateur OV_USER, un système de DB_LINK a été mis en place. Voici un schéma imagé de comment s?exécute une requête de l?utilisateur OV_USER sur une base de travail.
1) L?utilisateur OV_USER est sur la base de données HELLO_ORA. Il a précédemment reçu les droits sur la vue HELLO_VIEW du schéma OV_ADMIN.
2) L?utilisateur OV_USER exécute la vue HELLO_VIEW. Il va donner le relai (symbolisé par une liste de courses) à OV_ADMIN.
3) L?utilisateur OV_ADMIN va emprunter le DB_LINK privé (que lui seul peut emprunter) et arriver sur la base HELLO_CLE
4) L?utilisateur OV_ADMIN de la table HELLO_ORA va prendre l?identité de l?utilisateur OV_ADMIN créé sur HELLO_CLE (dans notre cas, mais plus généralement il prendra l?identité définie dans le DB_LINK). Il va consulter les tables concernées par la vue (seul l?utilisateur OV_ADMIN de la table HELLO_CLE possède les droits d?accès sur ces tables). Puis il effectuera le chemin inverse et donnera les données à l?utilisateur OV_USER.
Grâce à ce système, les failles de sécurité sont réduites. Seul l?utilisateur OV_ADMIN a accès aux bases de travail. En utilisant les vues, l?utilisateur OV_USER a donc indirectement l?accès aux tables dont il a besoin.
4.2.7. Prototype
http://www.mangaclub.ch/urd/imagecenter/Perso/116.gif
--------------------------------------------------------
Bref. pour le moment je débute la période de pré-acquis, c'est à dire les choses à effectuer avant le travail proprement dit. Cela concerne la connexion à une base oracle, et quelques tests avec les vues, les droits et les DBLink.
pour l'instant j'en suis au touuuut début. J'ai installé apache et je te de me connecter sur une base oracle d'un autre serveur. J'ai trouvé ce script (entre autre, j'aimerais plutot utiliser oci par la suite).
Code :
- // connexion.php se connecte à la base.
- $ora_conn = ora_logon("nombase@tnsname","password" );
- // Se déconnecter de la base
- ora_logoff($ora_conn);
|
et bien sur, l'erreur obtenue suivante:
Code :
- Fatal error: Call to undefined function: ora_logon() in c:\www\index.php on line 16
|
J'ai enlevé le commentaire de la ligne "extension=php_oracle.dll" (merci dropsy) dans le php.ini, mais aucun changement à l'horizon malheureusement. Je ne sais pas vraiment chercher à vrai dire, donc je recherche de l'aide auprès de vous
Merci d'avance pour votre aide, je vous tiendrai au courant de l'évolution de ce travail de diplome qui est une note importante de mon CFC d'informaticienne (formation de 4 ans que je termine en aout).
Pour info:
-> 30 avril: pré-acquis
-> début mai: commencement du travail de diplomes (60 périodes de 45 minutes)
-> mi-mai: intervention d'une tierce-personne pour voir ou en est le projet
-> fin-mai: fin du projet
-> juin: présentation orale à 3 personnes (1 personne consciente du dossier; 1 personne toute neuvelle; le maitre d'apprentissage (mais il n'a pas le droit de poser des questions durant la présentation))
Message édité par urd-sama le 29-04-2004 à 09:41:44