Configuration du serveur HTTP d'Oracle grâce à la passerelle PL/SQL

Ce tutoriel va vous présenter comment configurer le serveur HTTP d'Oracle grâce à la passerelle PL/SQL ainsi que les ressources d'une base de données Oracle 11g R1.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

I. Introduction

Ce tutoriel a pour but de vous montrer comment configurer le serveur HTTP d'Oracle grâce à la passerelle PL/SQL ainsi que l'accès FTP de votre serveur Oracle Entreprise 11g R1 grâce au schéma XDB.

Il s'adresse à un public confirmé en base de données Oracle et en développement PL/SQL.

Pour savoir comment installer Oracle 11g reportez-vous aux articles suivant : http://oracle.developpez.com/guide/installation/.

II. Le schéma XDB

XDB ?? Késaco ?? XDB : XML Database est un schéma qui permet de sauvegarder entre autre, les paramètres de configuration de la passerelle PL/SQL ainsi que les ressources.

II-A. Vérifier la présence du schéma XDB

Dans une invite de commande tapez les commandes suivantes :

 
Sélectionnez

> sqlplus /nolog 
SQL> connect sys/password as sysdba 
SQL> SELECT status, version, comp_name FROM dba_registry WHERE lower(comp_name) like 'oracle xml%';

Si le schéma XDB est installé vous devriez avoir le résultat suivant et vous pouvez directement aller au paragraphe III sinon allez au paragraphe II-B.

STATUS VERSION COMP_NAME
VALID Oracle XML Database 11.1.0.6.0

II-B. Installer le schéma XDB

Si le schéma XDB n'est pas installé, vous devez le faire impérativement.

Commencez par créer un utilisateur XDB avec un tablespace attribué. En tant qu'utilisateur XDB, lancez le script catqm.sql se trouvant dans le dossier $ORACLE_HOME/rdbms/admin. Il créera les tables et les vues nécessaires.

Reconnectez vous avec le compte SYS et lancez maintenant le script $ORACLE_HOME/rdbms/admin/catxdbj.sql qui chargera les librairies Java.

III. Configurer la passerelle

Pour configurer XDB, deux méthodes sont à votre disposition : en mode graphique avec Entreprise Manager ou en command SQL. Nous étudierons les deux méthodes en parallèles.

Une fois configurée, la passerelle HTTP vous permettra d'accéder à vos pages web via vos procédures.

III-A. Avec Entreprise Manager

Connectez vous avec le compte SYS sur Entreprise Manager à l'adresse suivante : https://localhost:1158/em.

Connexion EM

Cliquez sur l'onglet [Schémas] pour accéder à la configuration du schéma XDB (encadré en rouge).

Schéma XDB

Cliquez ensuite sur le lien "Configuration" du schéma Oracle XML DB.

Remplir ensuite les champs "Port http" et "Port https" (si nécessaire) ainsi que le champ "Protocole HTTPS". Ces ports vous permettrons d'accéder à votre site internet en mode sécurisé et non sécurisé. Vous pouvez également modifier les valeurs des autres champs.

Voici un exemple de configuration :

Configuration XDB

Cliquez enfin sur le bouton [OK] pour enregistrer les modifications.

Si vous changez les valeurs des champs avec une étoile, il vous faudra redémarrer la base de données pour qu'elles prennent effet.

III-B. Avec SQLPlus

Lancez SQLPlus dans une invite de commande et connectez avec le compte SYS.

Voici les commandes qui vous seront nécessaires pour configurer la passerelle :

Modifier le port d'écoute HTTP
Sélectionnez

SQL> CALL DBMS_XDB.SETHTTPPORT(80);
SQL> ALTER SYSTEM REGISTER;
Modifier le port d'écoute FTP
Sélectionnez

SQL> CALL DBMS_XDB.SETFTPPORT(21);
SQL> ALTER SYSTEM REGISTER;

Maintenant que les ports ont été configurés, vous pouvez vérifier dans la vue XDB.XDB$ROOT_INFO que tout est OK.

Voici la description de la table :

desc XDB.XDB$ROOT_INFO
Sélectionnez

RESOURCE_ROOT         ROWID
RCLIST                RAW(2000)
FTP_PORT              NUMBER(5)
FTP_PROTOCOL          VARCHAR2(4000)
HTTP_PORT             NUMBER(5)
HTTP_PROTOCOL         VARCHAR2(4000)
HTTP_HOST             VARCHAR2(4000)
HTTP2_PORT            NUMBER(5)
HTTP2_PROTOCOL        VARCHAR2(4000)
HTTP2_HOST            VARCHAR2(4000)
NFS_PORT              NUMBER(5)
NFS_PROTOCOL          VARCHAR2(4000)

IV. Configurer un DAD

Un DAD (Database Access Descriptor), pour faire simple, est un espace web où seront interprétées vos procédures comme page web. Par comparaison, c'est comme une section <Directory> </Directory> dans une configuration d'un serveur Apache où vous pourrez donner des droits d'accès...

Dans ce paragraphe nous allons créer un DAD nommé "developpez" dont l'utilisateur userDev sera le schéma qui contiendra les procédures du site internet.

IV-A. Création d'un DAD

Après avoir créé un utilisateur "userDev" avec le mot de passe "userDevPass" (par exemple), et les droits qui vous semblent nécessaires (create procedure, create table...), lancez une invite de commande et connectez-vous avec le compte SYS. Puis lancez les commandes suivantes :

Création du DAD
Sélectionnez

SQL> exec DBMS_EPG.create_dad (dad_name => 'developpez', path => '/developpez/*');
Page par défaut du DAD
Sélectionnez

SQL> exec DBMS_EPG.set_dad_attribute (dad_name => 'developpez', attr_name => 'default-page', attr_value => 'home');
Schéma utilisé pour le DAD
Sélectionnez

SQL> exec DBMS_EPG.set_dad_attribute (dad_name => 'developpez', attr_name => 'database-username', attr_value => 'USERDEV');

Toujours indiquer la valeur de l'attribut "database-username" en majuscule.

Mode d'authentification
Sélectionnez

SQL> exec DBMS_EPG.SET_DAD_ATTRIBUTE (dad_name => 'developpez', attr_name => 'authentication-mode', attr_value => 'Basic');
Autorisation sur le DAD
Sélectionnez

SQL> exec DBMS_EPG.AUTHORIZE_DAD ( dad_name => 'developpez', user => 'USERDEV' );

Pour finir si vous ne souhaitez pas avoir de Prompt à chaque appel de procédure de votre site internet, activer le compte ANONYMOUS avec la commande suivante :

 
Sélectionnez

SQL> ALTER USER anonymous ACCOUNT UNLOCK;

IV-B. La page d'accueil

Pour vérifier que le DAD est bien configuré, créez une procédure nommée HOME avec le schéma userDEV qui affichera la configuration du DAD comme cet exemple :

 
Sélectionnez

create or replace PROCEDURE home IS
  l_attrNames    DBMS_EPG.VARCHAR2_TABLE;
  l_attrValues   DBMS_EPG.VARCHAR2_TABLE;
  l_dadName VARCHAR2(20) := 'developpez';
 
BEGIN
 
  htp.p('<html>
            <head>
                <title>Ma page d''accueil</title>
            </head>
 
            <body>
 
                <h1>Bienvenue sur votre DAD</h1>
 
                <h3>Attributs :</h3>');
 
  DBMS_EPG.GET_ALL_DAD_ATTRIBUTES(l_dadName,l_attrNames,l_attrValues);
 
  htp.p('<ul>');
 
  FOR i IN 1..l_attrNames.COUNT LOOP
    htp.p('<li>' || LPAD(l_attrNames(i),20)||' : '||l_attrValues(i) || '</li>');
  END LOOP;
 
  htp.p('</ul>');
  htp.p('   </body
        </html>');
 
END home;

Pour accéder à cette page allez à l'adresse suivante : http://localhost/developpez/home.

IV-C. Type file dans un formulaire

Si vous comptez créer un formulaire pour uploader des documents (images, pdfs, docs...), il vous faut paramétrer le DAD pour accepter ce genre de transfert.

Commencez par créer une table qui sauvegardera vos documents :

 
Sélectionnez

CREATE TABLE uploaded_documents (
  name           VARCHAR2(256) UNIQUE NOT NULL,
  mime_type      VARCHAR2(128),
  doc_size       NUMBER,
  dad_charset    VARCHAR2(128),
  last_updated   DATE,
  content_type   VARCHAR2(128),
  blob_content   BLOB
) 

Maintenant que notre table est créée, il est nécessaire de créer des procédures qui téléchargeront et afficheront les liens vers nos documents. Pour cela je conseil de mettre toutes ces procédures dans un seul package.

Description du package
Sélectionnez

create or replace PACKAGE pckg_files AS
	-- Procédure pour télécharger un fichier
	PROCEDURE file_form;
 
	-- Procédure pour charger les données relative au téléchargement en base
	PROCEDURE upload_file (file  IN  VARCHAR2);
 
	-- Procédure utilisée par le DAD pour télécharger les documents en type BLOB
	PROCEDURE download;
 
END;
 
Corps du package
Sélectionnez

create or replace PACKAGE BODY pckg_files AS
 
PROCEDURE file_form AS
 
BEGIN
	htp.p('<html>
				<head>
					<title>Transfert de fichier</title>
				<head>
 
				<body>');
 
	htp.p('<h1>Transfert de fichier</h1>');
 
	htp.p('<form enctype="multipart/form-data" action="pckg_files.upload_file" method="post">
			Chemin <input type="file" name="file"> <input type="submit" value="Envoyer">
		</form>');
 
	htp.p('   </body>
        </html>');
END file_form;
-- ----------------------------------------------------------------------------
 
 
-- ----------------------------------------------------------------------------
PROCEDURE upload_file (file  IN  VARCHAR2) AS
-- ----------------------------------------------------------------------------
  l_real_name  VARCHAR2(1000);
BEGIN
 
  htp.p('<html>
				<head>
					<title>Fichier transféré</title>
				<head>
 
				<body>');
 
 
	htp.p('<h1>Etat du fichier téléchargé</h1>');
 
  l_real_name := SUBSTR(file, INSTR(file, '/') + 1);
 
  BEGIN
    -- Supprime un fichier déjà existant en base
    DELETE FROM uploaded_documents
    WHERE  name = l_real_name;
 
    -- Met à jour le vrai nom du fichier
    UPDATE uploaded_documents
    SET    name = l_real_name
    WHERE  name = file;
 
    HTP.p('<p>Transfert du fichier ' || l_real_name || ' réussi.</p>');
  EXCEPTION
    WHEN OTHERS THEN
      HTP.p('<p>Erreur de transfert du fichier ' || l_real_name || '.</p>');
      HTP.p(SQLERRM);
  END;
  HTP.p('<br /><br />');
 
 
  HTP.p('<h4>Fichiers téléchargés :</h4>');
 
  -- Liens pour afficher les documents
  FOR cur_rec IN (SELECT name FROM uploaded_documents) LOOP
	htp.p('<ul>');
	htp.p('<li><a href="docs/' || cur_rec.name || '" >docs/' || cur_rec.name || '</a></li>');
	htp.p('</ul>');
  END LOOP;
 
 
  htp.p('   </body>
        </html>');
 
END upload_file;
 
 
PROCEDURE download IS
 
  l_filename  VARCHAR2(255);
BEGIN
  l_filename := SUBSTR(OWA_UTIL.get_cgi_env('PATH_INFO'), 2);
  WPG_DOCLOAD.download_file(l_filename);
EXCEPTION
  WHEN OTHERS THEN
    HTP.p('<h4 style="color: red">Téléchargement du fichier ' || l_filename || ' a échoué.</h4>');
    HTP.p(SQLERRM);
END download;
 
 
END;
 

Pour plus d'informations sur le package "WPG_DOCLOAD" cliquez sur le lien suivant : http://www.psoug.org/reference/wpg_docload.html

Configurez maintenant le DAD en lançant les commandes suivantes :

Table où seront sauvegardés les documents
Sélectionnez

SQL> DBMS_EPG.set_dad_attribute  ( dad_name => 'developpez', attr_name => 'document-table-name', attr_value => 'uploaded_documents' ); 
Chemin vers les documents téléchargés
Sélectionnez

SQL> DBMS_EPG.set_dad_attribute('developpez','document-path','docs');

La valeur de l'attribut "document-path" peut être modifié mais il faudra également le faire dans le package "pckg_files".

Procédure utilisée par le DAD pour télécharger les documents
Sélectionnez

SQL> DBMS_EPG.set_dad_attribute('developpez','document-procedure', 'pckg_files.download');

IV-D. Autres commandes utiles

Suppression du DAD
Sélectionnez

SQL> exec DBMS_EPG.DROP_DAD('developpez');
Ne plus autoriser l'utilisateur sur le DAD
Sélectionnez

SQL> exec DBMS_EPG.deauthorize_dad('developepz', 'USERDEV');
Supprime un attribut du DAD (ici le mode d'authentification)
Sélectionnez

SQL> DBMS_EPG.delete_dad_attribute('developpez', 'authentication-mode');

Remplacez la valeur "developpez" par le nom de votre DAD dans toutes les commandes et scripts précédents.

V. Les ressources en accès FTP

Après avoir configuré dans le paragraphe III, la passerelle HTTP ainsi que FTP nous allons voir comment configurer et utiliser les ressources FTP.

V-A. Création d'un ressource

Connectez-vous à Entreprise Manager avec le compte SYS et cliquez sur l'onglet "Schéma". Puis dans la section "Oracle XML DB", cliquez sur "Ressources".

Image non disponible
Ressources XDB

Comme vous pouvez le constater, il y a déjà des ressources présentes. Elle sont déjà accessibles via l'url : http://localhost/. Un Prompt vous demande de vous identifier. Vous pouvez indiquer les identifiants du compte USERDEV.

Nous allons maintenant, pour illustrer l'ajout d'une ressource, ajouter un dossier avec pour accès l'utilisateur USERDEV. Cliquez sur le bouton [Créer].

Dans cette fenêtre, laissez la valeur du champ propriétaire à SYS. Puis indiquez, le nom de la ressource, puis le chemin d'accès à cette ressource. Sélectionnez "Dossier de ressource Oracle XML DB" dans le menu déroulant "Type".

Image non disponible
Dossier de ressource

Cliquez maintenant sur l'onglet "Sécurité" pour donner les droits d'accès aux utilisateurs.

Dans cette page, vous pouvez choisir des fichiers de paramètres par défaut ou en créer un autre.

Cliquez sur le bouton [Modifier] pour en modifier un. Nous, nous allons en créer un nouveau. Pour cela, cliquez sur le bouton [Créer].

Dans cette fenêtre, laissez la valeur du champ propriétaire à SYS. Puis indiquez, comme dossier acl "/sys/acls" car c'est ici que sont sauvegardées toutes les acls des ressources. Donnez un nom à l'acl et une description.

Il ne vous reste plus qu'à ajouter les utilisateurs et choisir leurs droits d'accès à la ressource. Voici un exemple :

ACL Ressource

Cliquez sur le bouton [OK].

Notez que j'ai donné tous les droits au propriétaire de la ressource et uniquement le droit de lecture à l'utilisateur USERDEV en accès WebDAV.

Votre acl est maintenant créée, il faut maintenant la sélectionner dans la liste déroulante et cliquez sur [OK] pour créer une ressource.

V-B. Accès aux ressources

Une fois vos ressources créées, vous pouvez y accéder soit en FTP soit en WebDAV suivant les droits que vous avez accordés aux ressources et aux utilisateurs.

VI. Conclusion

Durant ce tutoriel vous avez appris à configurer la passerelle PL/SQL et les accès aux ressources FTP et WebDAV. Vous voilà prêt à créer votre premier site internet. Voir le tutoriel d'Helyos à cette adresse : http://helyos.developpez.com/htp/

VII. Remerciements

Je remercie Joris Crozier pour sa relecture. Ainsi que Fleur-Anne Blain et Vincent Rogier pour leur aide.

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

  

Copyright © 2009 DARGES Jean-Sébastien. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.