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 :
PQconnectdb
partie1: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.