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 : https://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 autres, 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 :
> 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èle.
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.
Cliquez sur l'onglet [Schémas] pour accéder à la configuration du schéma XDB (encadré en rouge).
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 permettront 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 :
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 :
SQL> CALL DBMS_XDB.SETHTTPPORT(80);
SQL> ALTER SYSTEM REGISTER;
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 :
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 :
SQL> exec DBMS_EPG.create_dad (dad_name => 'developpez', path => '/developpez/*');
SQL> exec DBMS_EPG.set_dad_attribute (dad_name => 'developpez', attr_name => 'default-page', attr_value => 'home');
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 majuscules.
SQL> exec DBMS_EPG.SET_DAD_ATTRIBUTE (dad_name => 'developpez', attr_name => 'authentication-mode', attr_value => 'Basic');
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 :
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 :
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, PDF, doc…), il vous faut paramétrer le DAD pour accepter ce genre de transfert.
Commencez par créer une table qui sauvegardera vos documents :
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 conseille de mettre toutes ces procédures dans un seul package.
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 relatives 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;
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 :
SQL> DBMS_EPG.set_dad_attribute ( dad_name => 'developpez', attr_name => 'document-table-name', attr_value => 'uploaded_documents' );
SQL> DBMS_EPG.set_dad_attribute('developpez','document-path','docs');
La valeur de l'attribut « document-path » peut être modifiée, mais il faudra également le faire dans le package « pckg_files ».
SQL> DBMS_EPG.set_dad_attribute('developpez','document-procedure', 'pckg_files.download');
IV-D. Autres commandes utiles▲
SQL> exec DBMS_EPG.DROP_DAD('developpez');
SQL> exec DBMS_EPG.deauthorize_dad('developepz', 'USERDEV');
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'une 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 ».
Comme vous pouvez le constater, il y a déjà des ressources présentes. Elles 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 ».
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 acl 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 :
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 : https://helyos.developpez.com/htp/
VII. Remerciements▲
Je remercie Joris Crozier pour sa relecture. Ainsi que Fleur-Anne Blain et Vincent Rogier pour leur aide.