mirror of
https://github.com/apache/httpd.git
synced 2025-10-27 09:35:38 +03:00
git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1761218 13f79535-47bb-0310-9956-ffa450edef68
374 lines
15 KiB
Plaintext
374 lines
15 KiB
Plaintext
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
|
|
<?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
|
|
<!-- English Revision: 1760180 -->
|
|
<!-- French translation : Lucien GENTIS -->
|
|
<!-- Reviewed by : Vincent Deffontaines -->
|
|
|
|
<!--
|
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
|
contributor license agreements. See the NOTICE file distributed with
|
|
this work for additional information regarding copyright ownership.
|
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
|
(the "License"); you may not use this file except in compliance with
|
|
the License. You may obtain a copy of the License at
|
|
|
|
http://www.apache.org/licenses/LICENSE-2.0
|
|
|
|
Unless required by applicable law or agreed to in writing, software
|
|
distributed under the License is distributed on an "AS IS" BASIS,
|
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
See the License for the specific language governing permissions and
|
|
limitations under the License.
|
|
-->
|
|
|
|
<modulesynopsis metafile="mod_dbd.xml.meta">
|
|
|
|
<name>mod_dbd</name>
|
|
<description>Gestion des connexions à une base de données SQL</description>
|
|
<status>Extension</status>
|
|
<sourcefile>mod_dbd.c</sourcefile>
|
|
<identifier>dbd_module</identifier>
|
|
|
|
<summary>
|
|
<p>Le module <module>mod_dbd</module> gère les connexions
|
|
à une base de données SQL via <glossary>APR</glossary>. Il permet
|
|
aux modules qui requièrent des fonctions liées aux bases de données
|
|
SQL de se connecter à une base de données à la demande, et s'efforce
|
|
de conférer aux bases de données une efficacité et une
|
|
évolutivité optimales pour les MPMs threadés ou non threadés. Pour
|
|
plus de détails, voir le site web <a
|
|
href="http://apr.apache.org/">APR</a>,
|
|
ainsi que cette vue d'ensemble de l'<a
|
|
href="http://people.apache.org/~niq/dbd.html">environnement de
|
|
développement d'Apache DBD</a> par son développeur initial.
|
|
</p>
|
|
</summary>
|
|
|
|
<seealso><a href="../misc/password_encryptions.html">Formats des mots de
|
|
passe</a></seealso>
|
|
|
|
<section id="pooling"><title>Regroupement des connexions</title>
|
|
<p>Ce module gère de manière optimisée en fonction de la plate-forme
|
|
les connexions aux bases de données. Sur les plates-formes non
|
|
threadées, il maintient une connexion persistente à la manière d'un
|
|
LAMP classique (Linux, Apache, Mysql, Perl/PHP/Python). Sur les
|
|
plates-formes threadées, il maintient un <em>groupe de
|
|
connexions</em> à la fois plus évolutif et plus efficace, comme
|
|
décrit dans <a href="http://www.apachetutor.org/dev/reslist">cet
|
|
article d'ApacheTutor</a>. Notez que <module>mod_dbd</module>
|
|
remplace les modules présentés dans cet article.</p>
|
|
</section>
|
|
|
|
<section id="connecting"><title>Connexion</title>
|
|
|
|
<p>Pour vous connecter à votre base de données, vous devez spécifier un
|
|
pilote et des paramètres de connexion qui diffèrent selon le moteur de base
|
|
de données. Par exemple, pour vous connecter à mysql, spécifiez ce qui suit
|
|
:</p>
|
|
|
|
<highlight language="config">
|
|
DBDriver mysql
|
|
DBDParams host=localhost,dbname=pony,user=shetland,pass=appaloosa
|
|
</highlight>
|
|
|
|
<p>Vous pourrez alors utiliser cette connexion dans de nombreux autres
|
|
modules comme <module>mod_rewrite</module>, <module>mod_authn_dbd</module>
|
|
et <module>mod_lua</module>. Vous trouverez des exemples d'utilisation dans
|
|
la documentation de ces modules.</p>
|
|
|
|
<p>Voir la syntaxe de la directive <directive>DBDParams</directive> pour les
|
|
informations à fournir dans la chaîne de connexion en fonction des
|
|
différents pilotes de base de données supportés.</p>
|
|
|
|
</section>
|
|
|
|
<section id="API"><title>API DBD d'Apache</title>
|
|
<p><module>mod_dbd</module> exporte cinq fonctions que d'autres
|
|
modules pourront utiliser. L'API se présente comme suit :</p>
|
|
|
|
<highlight language="c">
|
|
typedef struct {
|
|
apr_dbd_t *handle;
|
|
apr_dbd_driver_t *driver;
|
|
apr_hash_t *prepared;
|
|
} ap_dbd_t;
|
|
|
|
/* Fonctions exportées pour accéder à la base de données */
|
|
|
|
/* ouvre une connexion qui DEVRA être explicitement fermée.
|
|
* Renvoie NULL en cas d'erreur
|
|
*/
|
|
AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
|
|
|
|
/* ferme une connexion ouverte avec ap_dbd_open */
|
|
AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
|
|
|
|
/* acquiert une connexion qui aura la durée de vie de la requête et qui
|
|
* NE DEVRA PAS être explicitement fermée. Renvoie NULL en cas
|
|
* d'erreur. C'est la fonction recommandée pour la plupart des
|
|
* applications.
|
|
*/
|
|
AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
|
|
|
|
/* acquiert une connexion qui aura la durée de vie d'une connexion et
|
|
* qui NE DEVRA PAS être explicitement fermée. Renvoie NULL en cas
|
|
* d'erreur.
|
|
*/
|
|
AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*);
|
|
|
|
/* Prépare une requête qu'un module client pourra utiliser */
|
|
AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
|
|
|
|
/* Exporte aussi ces fonctions à titre optionnel mour les modules qui
|
|
* péfèreraient les utiliser */
|
|
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*));
|
|
APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*));
|
|
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*));
|
|
APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*));
|
|
APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*));
|
|
</highlight>
|
|
</section>
|
|
|
|
<section id="prepared"><title>Requêtes SQL préparées</title>
|
|
<p><module>mod_dbd</module> supporte les requêtes SQL préparées pour
|
|
le compte des modules qui pourraient les utiliser. Chaque requête
|
|
préparée doit posséder un nom (étiquette), et est stockée dans un
|
|
condensé (hash) : les condensés sont du type
|
|
<code>apr_dbd_prepared_t</code> et s'utilisent dans toute requête
|
|
SQL ou commande select préparée par apr_dbd.</p>
|
|
|
|
<p>Il est du ressort des modules utilisateurs de dbd d'utiliser les
|
|
requêtes préparées et de préciser quelles requêtes doivent être
|
|
spécifiées dans httpd.conf, ou de fournir leurs propres directives
|
|
et d'utiliser <code>ap_dbd_prepare</code>.</p>
|
|
|
|
<note type="warning"><title>Avertissement</title>
|
|
Lorsqu'on utilise des requêtes préparées avec des bases de
|
|
données MySQL, il est préférable de définir
|
|
<code>reconnect</code> à 0 dans la chaîne de connexion, afin
|
|
d'éviter des erreurs provoquées par un client MySQL qui se
|
|
reconnecterait sans réinitialiser correctement les requêtes
|
|
préparées. Si <code>reconnect</code> est défini à 1, toute
|
|
connexion défectueuse sera sensée être réparée, mais comme
|
|
mod_dbd n'en est pas informé, les requêtes préparées seront
|
|
invalidées.
|
|
</note>
|
|
</section>
|
|
|
|
<section id="security">
|
|
<title>AVERTISSEMENT DE SECURITE</title>
|
|
<p>Toute application web impliquant une base de données doit se
|
|
protéger elle-même contre les attaques de type injection SQL. Dans
|
|
la plupart des cas Apache DBD est sûr, car les applications
|
|
utilisent des requêtes préparées, et les entrées non sûres ne seront
|
|
utilisées qu'à titre de données. Bien entendu, si vous l'utilisez
|
|
via un module tiers, vous devez être au fait des précautions à
|
|
prendre.</p>
|
|
<p>Cependant, le pilote <var>FreeTDS</var> est <strong>non
|
|
sûr</strong> de par sa nature même. Comme la bibliothèque
|
|
sous-jacente ne supporte pas les requêtes préparées, le pilote en
|
|
effectue une émulation, et les entrées non sûres sont fusionnées
|
|
avec la requête SQL.</p>
|
|
<p>Il peut être sécurisé en <em>décontaminant</em> toutes les
|
|
entrées : un processus inspiré de la recherche de contaminations de
|
|
Perl (NdT : <code>taint checking</code>). Chaque entrée est comparée
|
|
à une expression rationnelle, et
|
|
seules les entrées qui correspondent sont utilisées, en accord avec
|
|
le raccourci Perl :</p>
|
|
<example>
|
|
<pre><code> $untrusted =~ /([a-z]+)/;
|
|
$trusted = $1;</code></pre>
|
|
</example>
|
|
<p>Pour utiliser ceci, les expressions rationnelles de
|
|
décontamination doivent être incluses dans les requêtes préparées.
|
|
L'expression rationnelle doit se situer immédiatement après le
|
|
caractère % dans la requête préparée, et doit être entourée
|
|
d'accolades {}. Par exemple, si votre application attend une entrée
|
|
alphanumérique, vous pouvez utiliser :</p>
|
|
<example>
|
|
<code>"SELECT foo FROM bar WHERE input = %s"</code>
|
|
</example>
|
|
<p>avec d'autres pilotes, et ne risquer au pire qu'une requête
|
|
en échec. Mais avec FreeTDS, vous devez utiliser :</p>
|
|
<example>
|
|
<code>"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"</code>
|
|
</example>
|
|
<p>tout ce qui ne correspond pas à l'expression rationnelle est
|
|
alors rejeté, et la requête est ainsi désormais sûre.</p>
|
|
<p>Alternativement, vous pouvez utiliser le pilote ODBC tiers, qui
|
|
offre la sécurité des requêtes préparées authentiques.</p>
|
|
</section>
|
|
<directivesynopsis>
|
|
<name>DBDriver</name>
|
|
<description>Spécifie un pilote SQL</description>
|
|
<syntax>DBDriver <var>nom</var></syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Cette directive spécifie un pilote apr_dbd par son
|
|
nom. Le pilote doit être installé sur votre système (sur la plupart
|
|
des systèmes, il s'agit d'un objet partagé ou d'une dll). Par
|
|
exemple, <code>DBDriver mysql</code> va sélectionner le pilote MySQL
|
|
dans la bibliothèque apr_dbd_mysql.so.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>DBDParams</name>
|
|
<description>Paramètres de la connexion à la base de
|
|
données</description>
|
|
<syntax>DBDParams
|
|
<var>param1</var>=<var>valeur1</var>[,<var>param2</var>=<var>valeur2</var>]</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Cette directive spécifie des paramètres selon les
|
|
besoins du pilote concerné. En général, les paramètres à passer
|
|
concernent tout ce qui n'a pas de valeur par défaut comme le nom
|
|
d'utilisateur, le mot de passe, le nom de la base de données, le nom
|
|
d'hôte et le numéro de port de la connexion.</p>
|
|
<p>Les paramètres de la chaîne de connexion en fonction des
|
|
différents pilotes comprennent :</p>
|
|
<dl>
|
|
<dt>FreeTDS (pour MSSQL et SyBase)</dt>
|
|
<dd>username, password, appname, dbname, host, charset, lang, server</dd>
|
|
<dt>MySQL</dt>
|
|
<dd>host, port, user, pass, dbname, sock, flags, fldsz, group, reconnect</dd>
|
|
<dt>Oracle</dt>
|
|
<dd>user, pass, dbname, server</dd>
|
|
<dt>PostgreSQL</dt>
|
|
<dd>La chaîne de connexion est passée directement à <code>PQconnectdb</code></dd>
|
|
<dt>SQLite2</dt>
|
|
<dd>La chaîne de connexion est scindée avec comme séparateur le
|
|
caractère ':', et <code>partie1:partie2</code> est utilisé dans
|
|
<code>sqlite_open(partie1, atoi(partie2), NULL)</code></dd>
|
|
<dt>SQLite3</dt>
|
|
<dd>La chaîne de connexion est passée directement à <code>sqlite3_open</code></dd>
|
|
<dt>ODBC</dt>
|
|
<dd>datasource, user, password, connect, ctimeout, stimeout, access, txmode, bufsize</dd>
|
|
</dl>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>DBDPersist</name>
|
|
<description>Utiliser ou non des connexions persistentes</description>
|
|
<syntax>DBDPersist On|Off</syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Si cette directive est définie à Off, les connexions persistentes
|
|
et les connexions groupées sont désactivées. À la demande d'un
|
|
client, une nouvelle connexion à la base de données est ouverte, et
|
|
fermée immédiatement à l'issue du traitement. Cette configuration ne
|
|
doit être utilisée qu'à des fins de débogage, ou sur des serveurs à
|
|
charge faible.</p>
|
|
|
|
<p>Par défaut, les groupes de connexions persistentes sont activés
|
|
(ou une seule connexion persistente du style LAMP pour les serveurs
|
|
non threadés), et c'est la configuration qui devrait être utilisée
|
|
dans la plupart des cas sur un serveur en production.</p>
|
|
|
|
<p>Avant la version 2.2.2, cette directive n'acceptait que les
|
|
valeurs <code>0</code> et <code>1</code> au lieu de <code>Off</code>
|
|
et <code>On</code>, respectivement.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>DBDPrepareSQL</name>
|
|
<description>Définit une requête SQL préparée</description>
|
|
<syntax>DBDPrepareSQL <var>"requête SQL"</var> <var>étiquette</var></syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Pour les modules tels que les modules d'authentification, qui
|
|
utilisent de manière répétée la même requête SQL, on peut optimiser
|
|
les performances en préparant la requête une fois pour toutes au
|
|
démarrage, plutôt qu'à chaque utilisation. Cette directive permet de
|
|
préparer une requête SQL et de lui assigner une étiquette.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>DBDMin</name>
|
|
<description>Nombre minimum de connexions</description>
|
|
<syntax>DBDMin <var>nombre</var></syntax>
|
|
<default>DBDMin 1</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Cette directive définit le nombre minimum de connexions
|
|
par processus (plates-formes threadées seulement).</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>DBDKeep</name>
|
|
<description>Nombre maximum de connexions maintenues</description>
|
|
<syntax>DBDKeep <var>nombre</var></syntax>
|
|
<default>DBDKeep 2</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Cette directive définit le nombre maximum de connexions
|
|
à maintenir par processus, en dehors de celles servant à gérer les
|
|
pics de demandes (plates-formes threadées seulement).</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>DBDMax</name>
|
|
<description>Nombre maximum de connexions</description>
|
|
<syntax>DBDMax <var>nombre</var></syntax>
|
|
<default>DBDMax 10</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Cette directive définit le nombre maximum effectif de
|
|
connexions par processus (plates-formes threadées seulement).</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>DBDExptime</name>
|
|
<description>Durée de vie des connexions inactives</description>
|
|
<syntax>DBDExptime <var>durée en secondes</var></syntax>
|
|
<default>DBDExptime 300</default>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Cette directive définit la durée de vie des connexions
|
|
inactives lorsque le nombre de connexions spécifié par la directive
|
|
DBDKeep a été dépassé (plates-formes threadées seulement).</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
<directivesynopsis>
|
|
<name>DBDInitSQL</name>
|
|
<description>Exécute une instruction SQL après connexion à une base de
|
|
données</description>
|
|
<syntax>DBDInitSQL <var>"instruction SQL"</var></syntax>
|
|
<contextlist><context>server config</context><context>virtual host</context>
|
|
</contextlist>
|
|
|
|
<usage>
|
|
<p>Les modules qui le souhaitent peuvent exécuter une ou plusieurs
|
|
instructions SQL après connexion à une base de données. Par exemple
|
|
initialiser certaines valeurs, ou ajouter une entrée dans le journal
|
|
lors d'une nouvelle connexion à la base de données.</p>
|
|
</usage>
|
|
</directivesynopsis>
|
|
|
|
|
|
</modulesynopsis>
|