]> granicus.if.org Git - apache/blob - docs/manual/mod/mod_dbd.xml.fr
Prelim docs
[apache] / docs / manual / mod / mod_dbd.xml.fr
1 <?xml version="1.0"?>
2 <!DOCTYPE modulesynopsis SYSTEM "../style/modulesynopsis.dtd">
3 <?xml-stylesheet type="text/xsl" href="../style/manual.fr.xsl"?>
4 <!-- English Revision: 1673947 -->
5 <!-- French translation : Lucien GENTIS -->
6 <!-- Reviewed by : Vincent Deffontaines -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <modulesynopsis metafile="mod_dbd.xml.meta">
26
27 <name>mod_dbd</name>
28 <description>Gestion des connexions &agrave; une base de donn&eacute;es SQL</description>
29 <status>Extension</status>
30 <sourcefile>mod_dbd.c</sourcefile>
31 <identifier>dbd_module</identifier>
32
33 <summary>
34     <p>Le module <module>mod_dbd</module> g&egrave;re les connexions
35     &agrave; une base de donn&eacute;es SQL via <glossary>APR</glossary>. Il permet
36     aux modules qui requi&egrave;rent des fonctions li&eacute;es aux bases de donn&eacute;es
37     SQL de se connecter &agrave; une base de donn&eacute;es &agrave; la demande, et s'efforce
38     de conf&eacute;rer aux bases de donn&eacute;es une efficacit&eacute; et une
39     &eacute;volutivit&eacute; optimales pour les MPMs thread&eacute;s ou non thread&eacute;s. Pour
40     plus de d&eacute;tails, voir le site web <a
41     href="http://apr.apache.org/">APR</a>,
42     ainsi que cette vue d'ensemble de l'<a
43     href="http://people.apache.org/~niq/dbd.html">environnement de
44     d&eacute;veloppement d'Apache DBD</a> par son d&eacute;veloppeur initial.
45 </p>
46 </summary>
47
48 <seealso><a href="../misc/password_encryptions.html">Formats des mots de
49 passe</a></seealso>
50
51 <section id="pooling"><title>Regroupement des connexions</title>
52     <p>Ce module g&egrave;re de mani&egrave;re optimis&eacute;e en fonction de la plate-forme
53     les connexions aux bases de donn&eacute;es. Sur les plates-formes non
54     thread&eacute;es, il maintient une connexion persistente &agrave; la mani&egrave;re d'un
55     LAMP classique (Linux, Apache, Mysql, Perl/PHP/Python). Sur les
56     plates-formes thread&eacute;es, il maintient un <em>groupe de
57     connexions</em> &agrave; la fois plus &eacute;volutif et plus efficace, comme
58     d&eacute;crit dans <a href="http://www.apachetutor.org/dev/reslist">cet
59     article d'ApacheTutor</a>. Notez que <module>mod_dbd</module>
60     remplace les modules pr&eacute;sent&eacute;s dans cet article.</p>
61 </section>
62
63 <section id="API"><title>API DBD d'Apache</title>
64     <p><module>mod_dbd</module> exporte cinq fonctions que d'autres
65     modules pourront utiliser. L'API se pr&eacute;sente comme suit :</p>
66
67     <highlight language="c">
68 typedef struct {
69     apr_dbd_t *handle;
70     apr_dbd_driver_t *driver;
71     apr_hash_t *prepared;
72 } ap_dbd_t;
73
74 /* Fonctions export&eacute;es pour acc&eacute;der &agrave; la base de donn&eacute;es */
75
76 /* ouvre une connexion qui DEVRA &ecirc;tre explicitement ferm&eacute;e.
77  * Renvoie NULL en cas d'erreur
78  */
79 AP_DECLARE(ap_dbd_t*) ap_dbd_open(apr_pool_t*, server_rec*);
80
81 /* ferme une connexion ouverte avec ap_dbd_open */
82 AP_DECLARE(void) ap_dbd_close(server_rec*, ap_dbd_t*);
83
84 /* acquiert une connexion qui aura la dur&eacute;e de vie de la requ&ecirc;te et qui
85  * NE DEVRA PAS &ecirc;tre explicitement ferm&eacute;e. Renvoie NULL en cas
86  * d'erreur. C'est la fonction recommand&eacute;e pour la plupart des
87  * applications.
88  */
89 AP_DECLARE(ap_dbd_t*) ap_dbd_acquire(request_rec*);
90
91 /* acquiert une connexion qui aura la dur&eacute;e de vie d'une connexion et
92  * qui NE DEVRA PAS &ecirc;tre explicitement ferm&eacute;e. Renvoie NULL en cas
93  * d'erreur.
94  */
95 AP_DECLARE(ap_dbd_t*) ap_dbd_cacquire(conn_rec*);
96
97 /* Pr&eacute;pare une requ&ecirc;te qu'un module client pourra utiliser */
98 AP_DECLARE(void) ap_dbd_prepare(server_rec*, const char*, const char*);
99
100 /* Exporte aussi ces fonctions &agrave; titre optionnel mour les modules qui
101  * p&eacute;f&egrave;reraient les utiliser */
102 APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_open, (apr_pool_t*, server_rec*));
103 APR_DECLARE_OPTIONAL_FN(void, ap_dbd_close, (server_rec*, ap_dbd_t*));
104 APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_acquire, (request_rec*));
105 APR_DECLARE_OPTIONAL_FN(ap_dbd_t*, ap_dbd_cacquire, (conn_rec*));
106 APR_DECLARE_OPTIONAL_FN(void, ap_dbd_prepare, (server_rec*, const char*, const char*));
107 </highlight>
108 </section>
109
110 <section id="prepared"><title>Requ&ecirc;tes SQL pr&eacute;par&eacute;es</title>
111     <p><module>mod_dbd</module> supporte les requ&ecirc;tes SQL pr&eacute;par&eacute;es pour
112     le compte des modules qui pourraient les utiliser. Chaque requ&ecirc;te
113     pr&eacute;par&eacute;e doit poss&eacute;der un nom (&eacute;tiquette), et est stock&eacute;e dans un
114     condens&eacute; (hash) : les condens&eacute;s sont du type
115     <code>apr_dbd_prepared_t</code> et s'utilisent dans toute requ&ecirc;te
116     SQL ou commande select pr&eacute;par&eacute;e par apr_dbd.</p>
117
118     <p>Il est du ressort des modules utilisateurs de dbd d'utiliser les
119     requ&ecirc;tes pr&eacute;par&eacute;es et de pr&eacute;ciser quelles requ&ecirc;tes doivent &ecirc;tre
120     sp&eacute;cifi&eacute;es dans httpd.conf, ou de fournir leurs propres directives
121     et d'utiliser <code>ap_dbd_prepare</code>.</p>
122
123     <note type="warning"><title>Avertissement</title>
124         Lorsqu'on utilise des requ&ecirc;tes pr&eacute;par&eacute;es avec des bases de
125         donn&eacute;es MySQL, il est pr&eacute;f&eacute;rable de d&eacute;finir
126         <code>reconnect</code> &agrave; 0 dans la cha&icirc;ne de connexion, afin
127         d'&eacute;viter des erreurs provoqu&eacute;es par un client MySQL qui se
128         reconnecterait sans r&eacute;initialiser correctement les requ&ecirc;tes
129         pr&eacute;par&eacute;es. Si <code>reconnect</code> est d&eacute;fini &agrave; 1, toute
130         connexion d&eacute;fectueuse sera sens&eacute;e &ecirc;tre r&eacute;par&eacute;e, mais comme
131         mod_dbd n'en est pas inform&eacute;, les requ&ecirc;tes pr&eacute;par&eacute;es seront
132         invalid&eacute;es.
133         </note>
134 </section>
135
136 <section id="security">
137 <title>AVERTISSEMENT DE SECURITE</title>
138     <p>Toute application web impliquant une base de donn&eacute;es doit se
139     prot&eacute;ger elle-m&ecirc;me contre les attaques de type injection SQL. Dans
140     la plupart des cas Apache DBD est s&ucirc;r, car les applications
141     utilisent des requ&ecirc;tes pr&eacute;par&eacute;es, et les entr&eacute;es non s&ucirc;res ne seront
142     utilis&eacute;es qu'&agrave; titre de donn&eacute;es. Bien entendu, si vous l'utilisez
143     via un module tiers, vous devez &ecirc;tre au fait des pr&eacute;cautions &agrave;
144     prendre.</p>
145     <p>Cependant, le pilote <var>FreeTDS</var> est <strong>non
146     s&ucirc;r</strong> de par sa nature m&ecirc;me. Comme la biblioth&egrave;que
147     sous-jacente ne supporte pas les requ&ecirc;tes pr&eacute;par&eacute;es, le pilote en
148     effectue une &eacute;mulation, et les entr&eacute;es non s&ucirc;res sont fusionn&eacute;es
149     avec la requ&ecirc;te SQL.</p>
150     <p>Il peut &ecirc;tre s&eacute;curis&eacute; en <em>d&eacute;contaminant</em> toutes les
151     entr&eacute;es : un processus inspir&eacute; de la recherche de contaminations de
152     Perl (NdT : <code>taint checking</code>). Chaque entr&eacute;e est compar&eacute;e
153     &agrave; une expression rationnelle, et
154     seules les entr&eacute;es qui correspondent sont utilis&eacute;es, en accord avec
155     le raccourci Perl :</p>
156     <example>
157         <pre><code>  $untrusted =~ /([a-z]+)/;
158   $trusted = $1;</code></pre>
159     </example>
160     <p>Pour utiliser ceci, les expressions rationnelles de
161     d&eacute;contamination doivent &ecirc;tre incluses dans les requ&ecirc;tes pr&eacute;par&eacute;es.
162     L'expression rationnelle doit se situer imm&eacute;diatement apr&egrave;s le
163     caract&egrave;re % dans la requ&ecirc;te pr&eacute;par&eacute;e, et doit &ecirc;tre entour&eacute;e
164     d'accolades {}. Par exemple, si votre application attend une entr&eacute;e
165     alphanum&eacute;rique, vous pouvez utiliser :</p>
166     <example>
167        <code>"SELECT foo FROM bar WHERE input = %s"</code>
168     </example>
169     <p>avec d'autres pilotes, et ne risquer au pire qu'une requ&ecirc;te
170     en &eacute;chec. Mais avec FreeTDS, vous devez utiliser :</p>
171     <example>
172        <code>"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"</code>
173     </example>
174     <p>tout ce qui ne correspond pas &agrave; l'expression rationnelle est
175     alors rejet&eacute;, et la requ&ecirc;te est ainsi d&eacute;sormais s&ucirc;re.</p>
176     <p>Alternativement, vous pouvez utiliser le pilote ODBC tiers, qui
177     offre la s&eacute;curit&eacute; des requ&ecirc;tes pr&eacute;par&eacute;es authentiques.</p>
178 </section>
179 <directivesynopsis>
180 <name>DBDriver</name>
181 <description>Sp&eacute;cifie un pilote SQL</description>
182 <syntax>DBDriver <var>nom</var></syntax>
183 <contextlist><context>server config</context><context>virtual host</context>
184 </contextlist>
185
186 <usage>
187     <p>Cette directive sp&eacute;cifie un pilote apr_dbd par son
188     nom. Le pilote doit &ecirc;tre install&eacute; sur votre syst&egrave;me (sur la plupart
189     des syst&egrave;mes, il s'agit d'un objet partag&eacute; ou d'une dll). Par
190     exemple, <code>DBDriver mysql</code> va s&eacute;lectionner le pilote MySQL
191     dans la biblioth&egrave;que apr_dbd_mysql.so.</p>
192 </usage>
193 </directivesynopsis>
194
195 <directivesynopsis>
196 <name>DBDParams</name>
197 <description>Param&egrave;tres de la connexion &agrave; la base de
198 donn&eacute;es</description>
199 <syntax>DBDParams
200 <var>param1</var>=<var>valeur1</var>[,<var>param2</var>=<var>valeur2</var>]</syntax>
201 <contextlist><context>server config</context><context>virtual host</context>
202 </contextlist>
203
204 <usage>
205     <p>Cette directive sp&eacute;cifie des param&egrave;tres selon les
206     besoins du pilote concern&eacute;. En g&eacute;n&eacute;ral, les param&egrave;tres &agrave; passer
207     concernent tout ce qui n'a pas de valeur par d&eacute;faut comme le nom
208     d'utilisateur, le mot de passe, le nom de la base de donn&eacute;es, le nom
209     d'h&ocirc;te et le num&eacute;ro de port de la connexion.</p>
210     <p>Les param&egrave;tres de la cha&icirc;ne de connexion en fonction des
211     diff&eacute;rents pilotes comprennent :</p>
212     <dl>
213     <dt>FreeTDS (pour MSSQL et SyBase)</dt>
214     <dd>username, password, appname, dbname, host, charset, lang, server</dd>
215     <dt>MySQL</dt>
216     <dd>host, port, user, pass, dbname, sock, flags, fldsz, group, reconnect</dd>
217     <dt>Oracle</dt>
218     <dd>user, pass, dbname, server</dd>
219     <dt>PostgreSQL</dt>
220     <dd>La cha&icirc;ne de connexion est pass&eacute;e directement &agrave; <code>PQconnectdb</code></dd>
221     <dt>SQLite2</dt>
222     <dd>La cha&icirc;ne de connexion est scind&eacute;e avec comme s&eacute;parateur le
223     caract&egrave;re ':', et <code>partie1:partie2</code> est utilis&eacute; dans
224     <code>sqlite_open(partie1, atoi(partie2), NULL)</code></dd>
225     <dt>SQLite3</dt>
226     <dd>La cha&icirc;ne de connexion est pass&eacute;e directement &agrave; <code>sqlite3_open</code></dd>
227     <dt>ODBC</dt>
228     <dd>datasource, user, password, connect, ctimeout, stimeout, access, txmode, bufsize</dd>
229     </dl>
230 </usage>
231 </directivesynopsis>
232
233 <directivesynopsis>
234 <name>DBDPersist</name>
235 <description>Utiliser ou non des connexions persistentes</description>
236 <syntax>DBDPersist On|Off</syntax>
237 <contextlist><context>server config</context><context>virtual host</context>
238 </contextlist>
239
240 <usage>
241     <p>Si cette directive est d&eacute;finie &agrave; Off, les connexions persistentes
242     et les connexions group&eacute;es sont d&eacute;sactiv&eacute;es. &Agrave; la demande d'un
243     client, une nouvelle connexion &agrave; la base de donn&eacute;es est ouverte, et
244     ferm&eacute;e imm&eacute;diatement &agrave; l'issue du traitement. Cette configuration ne
245     doit &ecirc;tre utilis&eacute;e qu'&agrave; des fins de d&eacute;bogage, ou sur des serveurs &agrave;
246     charge faible.</p>
247
248     <p>Par d&eacute;faut, les groupes de connexions persistentes sont activ&eacute;s
249     (ou une seule connexion persistente du style LAMP pour les serveurs
250     non thread&eacute;s), et c'est la configuration qui devrait &ecirc;tre utilis&eacute;e
251     dans la plupart des cas sur un serveur en production.</p>
252
253     <p>Avant la version 2.2.2, cette directive n'acceptait que les
254     valeurs <code>0</code> et <code>1</code> au lieu de <code>Off</code>
255     et <code>On</code>, respectivement.</p>
256 </usage>
257 </directivesynopsis>
258
259 <directivesynopsis>
260 <name>DBDPrepareSQL</name>
261 <description>D&eacute;finit une requ&ecirc;te SQL pr&eacute;par&eacute;e</description>
262 <syntax>DBDPrepareSQL <var>"requ&ecirc;te SQL"</var> <var>&eacute;tiquette</var></syntax>
263 <contextlist><context>server config</context><context>virtual host</context>
264 </contextlist>
265
266 <usage>
267     <p>Pour les modules tels que les modules d'authentification, qui
268     utilisent de mani&egrave;re r&eacute;p&eacute;t&eacute;e la m&ecirc;me requ&ecirc;te SQL, on peut optimiser
269     les performances en pr&eacute;parant la requ&ecirc;te une fois pour toutes au
270     d&eacute;marrage, plut&ocirc;t qu'&agrave; chaque utilisation. Cette directive permet de
271     pr&eacute;parer une requ&ecirc;te SQL et de lui assigner une &eacute;tiquette.</p>
272 </usage>
273 </directivesynopsis>
274
275 <directivesynopsis>
276 <name>DBDMin</name>
277 <description>Nombre minimum de connexions</description>
278 <syntax>DBDMin <var>nombre</var></syntax>
279 <default>DBDMin 1</default>
280 <contextlist><context>server config</context><context>virtual host</context>
281 </contextlist>
282
283 <usage>
284     <p>Cette directive d&eacute;finit le nombre minimum de connexions
285     par processus (plates-formes thread&eacute;es seulement).</p>
286 </usage>
287 </directivesynopsis>
288
289 <directivesynopsis>
290 <name>DBDKeep</name>
291 <description>Nombre maximum de connexions maintenues</description>
292 <syntax>DBDKeep <var>nombre</var></syntax>
293 <default>DBDKeep 2</default>
294 <contextlist><context>server config</context><context>virtual host</context>
295 </contextlist>
296
297 <usage>
298     <p>Cette directive d&eacute;finit le nombre maximum de connexions
299     &agrave; maintenir par processus, en dehors de celles servant &agrave; g&eacute;rer les
300     pics de demandes (plates-formes thread&eacute;es seulement).</p>
301 </usage>
302 </directivesynopsis>
303
304 <directivesynopsis>
305 <name>DBDMax</name>
306 <description>Nombre maximum de connexions</description>
307 <syntax>DBDMax <var>nombre</var></syntax>
308 <default>DBDMax 10</default>
309 <contextlist><context>server config</context><context>virtual host</context>
310 </contextlist>
311
312 <usage>
313     <p>Cette directive d&eacute;finit le nombre maximum effectif de
314     connexions par processus (plates-formes thread&eacute;es seulement).</p>
315 </usage>
316 </directivesynopsis>
317
318 <directivesynopsis>
319 <name>DBDExptime</name>
320 <description>Dur&eacute;e de vie des connexions inactives</description>
321 <syntax>DBDExptime <var>dur&eacute;e en secondes</var></syntax>
322 <default>DBDExptime 300</default>
323 <contextlist><context>server config</context><context>virtual host</context>
324 </contextlist>
325
326 <usage>
327     <p>Cette directive d&eacute;finit la dur&eacute;e de vie des connexions
328     inactives lorsque le nombre de connexions sp&eacute;cifi&eacute; par la directive
329     DBDKeep a &eacute;t&eacute; d&eacute;pass&eacute; (plates-formes thread&eacute;es seulement).</p>
330 </usage>
331 </directivesynopsis>
332
333 <directivesynopsis>
334 <name>DBDInitSQL</name>
335 <description>Ex&eacute;cute une instruction SQL apr&egrave;s connexion &agrave; une base de
336 donn&eacute;es</description>
337 <syntax>DBDInitSQL <var>"instruction SQL"</var></syntax>
338 <contextlist><context>server config</context><context>virtual host</context>
339 </contextlist>
340
341 <usage>
342     <p>Les modules qui le souhaitent peuvent ex&eacute;cuter une ou plusieurs
343     instructions SQL apr&egrave;s connexion &agrave; une base de donn&eacute;es. Par exemple
344     initialiser certaines valeurs, ou ajouter une entr&eacute;e dans le journal
345     lors d'une nouvelle connexion &agrave; la base de donn&eacute;es.</p>
346 </usage>
347 </directivesynopsis>
348
349
350 </modulesynopsis>