Serveur Apache HTTP Version 2.4

| 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 |
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.
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.
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*));
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.
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.
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.
| 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).
| 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.
| 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).
| 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).
| 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).
| 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 :
PQconnectdbpartie1:partie2 est utilis� dans
sqlite_open(partie1, atoi(partie2), NULL)sqlite3_open| 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.
| 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.
| 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.