<-
Apache > Serveur HTTP > Documentation > Version 2.4 > Modules

Module Apache mod_dbd

Langues Disponibles:  en  |  fr 

Description:Gestion des connexions ´┐Ż une base de donn´┐Żes SQL
Statut:Extension
Identificateur´┐Żde´┐ŻModule:dbd_module
Fichier´┐ŻSource:mod_dbd.c
Compatibilit´┐Ż:Versions 2.1 and sup´┐Żrieures

Sommaire

Le module mod_dbd g´┐Żre les connexions ´┐Ż une base de donn´┐Żes SQL via APR. 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 APR, ainsi que cette vue d'ensemble de l'environnement de d´┐Żveloppement d'Apache DBD par son d´┐Żveloppeur initial.

Directives

Sujets

Voir aussi

top

Regroupement des connexions

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 groupe de connexions ´┐Ż la fois plus ´┐Żvolutif et plus efficace, comme d´┐Żcrit dans cet article d'ApacheTutor. Notez que mod_dbd remplace les modules pr´┐Żsent´┐Żs dans cet article.

top

API DBD d'Apache

mod_dbd exporte cinq fonctions que d'autres modules pourront utiliser. L'API se pr´┐Żsente comme suit :

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 DOIT avoir ´┐Żt´┐Ż 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 DOIT PAS avoir ´┐Żt´┐Ż 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 DOIT PAS avoir ´┐Żt´┐Ż 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*));
top

Requ´┐Żtes SQL pr´┐Żpar´┐Żes

mod_dbd supporte les requ´┐Żtes SQL pr´┐Żpar´┐Żes ´┐Ż destination 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 apr_dbd_prepared_t et s'utilisent dans toute requ´┐Żte SQL ou commande select pr´┐Żpar´┐Że par apr_dbd.

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 apache2.conf, ou de fournir leurs propres directives et d'utiliser ap_dbd_prepare.

Avertissement

Lorsqu'on utilise des requ´┐Żtes pr´┐Żpar´┐Żes avec des bases de donn´┐Żes MySQL, il est pr´┐Żf´┐Żrable de d´┐Żfinir reconnect ´┐Ż 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 reconnect 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.
top

AVERTISSEMENT DE SECURITE

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 sures 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.

Cependant, le pilote FreeTDS est non s´┐Żr 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.

Il peut ´┐Żtre s´┐Żcuris´┐Ż en d´┐Żcontaminant toutes les entr´┐Żes : un processus inspir´┐Ż de la recherche de contaminations (taint mode) de Perl. Chaque entr´┐Że est compar´┐Że ´┐Ż une expression rationnelle, et seules les entr´┐Żes qui correspondent sont utilis´┐Żes, en accord avec le langage Perl :

  $untrusted =~ /([a-z]+)/;
  $trusted = $1;

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 :

"SELECT foo FROM bar WHERE input = %s"

avec d'autres pilotes, et ne risquer au pire qu'une requ´┐Żte ´┐Żchou´┐Że. Mais avec FreeTDS, vous devez utiliser :

"SELECT foo FROM bar WHERE input = %{([A-Za-z0-9]+)}s"

tout ce qui ne correspond pas ´┐Ż l'expression rationnelle est alors rejet´┐Ż, et la requ´┐Żte est maintenant s´┐Żre.

Alternativement, vous pouvez utiliser le pilote ODBC tiers, qui offre la s´┐Żcurit´┐Ż des requ´┐Żtes pr´┐Żpar´┐Żes authentiques.

top

DBDExptime Directive

Description:Dur´┐Że de vie des connexions inactives
Syntaxe:DBDExptime dur´┐Że en secondes
D´┐Żfaut:DBDExptime 300
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

Cette directive permet de d´┐Żfinir 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 uniquement).

top

DBDInitSQL Directive

Description:Ex´┐Żcute une instruction SQL apr´┐Żs connexion ´┐Ż une base de donn´┐Żes
Syntaxe:DBDInitSQL "instruction SQL"
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

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.

top

DBDKeep Directive

Description:Nombre maximum de connexions maintenues
Syntaxe:DBDKeep nombre
D´┐Żfaut:DBDKeep 2
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

Cette directive permet de d´┐Żfinir le nombre maximum de connexions ´┐Ż maintenir par processus, en dehors de celles servant ´┐Ż g´┐Żrer les pics de demandes (plates-formes thread´┐Żes uniquement).

top

DBDMax Directive

Description:Nombre maximum de connexions
Syntaxe:DBDMax nombre
D´┐Żfaut:DBDMax 10
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

Cette directive permet de d´┐Żfinir le nombre maximum effectif de connexions par processus (plates-formes thread´┐Żes uniquement).

top

DBDMin Directive

Description:Nombre minimum de connexions
Syntaxe:DBDMin nombre
D´┐Żfaut:DBDMin 1
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

Cette directive permet de d´┐Żfinir le nombre minimum de connexions par processus (plates-formes thread´┐Żes uniquement).

top

DBDParams Directive

Description:Param´┐Żtres de la connexion ´┐Ż la base de donn´┐Żes
Syntaxe:DBDParams param1=valeur1[,param2=valeur2]
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

Cette directive permet de sp´┐Żcifier 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.

Les param´┐Żtres de la cha´┐Żne de connexion en fonction des diff´┐Żrents pilotes comprennent :

FreeTDS (pour MSSQL et SyBase)
username, password, appname, dbname, host, charset, lang, server
MySQL
host, port, user, pass, dbname, sock, flags, fldsz, group, reconnect
Oracle
user, pass, dbname, server
PostgreSQL
La cha´┐Żne de connexion est pass´┐Że directement ´┐Ż PQconnectdb
SQLite2
La cha´┐Żne de connexion est scind´┐Że avec comme s´┐Żparateur le caract´┐Żre ':', et partie1:partie2 est utilis´┐Ż dans sqlite_open(partie1, atoi(partie2), NULL)
SQLite3
La cha´┐Żne de connexion est pass´┐Że directement ´┐Ż sqlite3_open
ODBC
datasource, user, password, connect, ctimeout, stimeout, access, txmode, bufsize
top

DBDPersist Directive

Description:Utiliser ou non des connexions persistentes
Syntaxe:DBDPersist On|Off
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

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.

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.

Avant la version 2.2.2, cette directive n'acceptait que les valeurs 0 et 1 au lieu de Off et On, respectivement.

top

DBDPrepareSQL Directive

Description:D´┐Żfinit une requ´┐Żte SQL pr´┐Żpar´┐Że
Syntaxe:DBDPrepareSQL "requ´┐Żte SQL" ´┐Żtiquette
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

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.

top

DBDriver Directive

Description:Sp´┐Żcifie un pilote SQL
Syntaxe:DBDriver nom
Contexte:configuration du serveur, serveur virtuel
Statut:Extension
Module:mod_dbd

Cette directive permet de sp´┐Żcifier 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, DBDriver mysql va s´┐Żlectionner le pilote MySQL dans la biblioth´┐Żque apr_dbd_mysql.so.

Langues Disponibles:  en  |  fr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.