Serveur HTTP Apache Version 2.5

Apache > Serveur HTTP > Documentation > Version 2.5 > Modules

# Module Apache mod_authn_dbd

Description: | Authentification utilisateur à l'aide d'une base de données SQL
Statut: | Extension
Identificateur de Module: | authn_dbd_module
Fichier Source: | mod_authn_dbd.c

### Sommaire

Ce module permet aux frontaux d'authentification comme `mod_auth_digest` et `mod_auth_basic` d'authentifier les utilisateurs en les recherchant dans une base de données SQL. `mod_authn_file`, par exemple, fournit une fonctionnalité similaire.

Ce module s'appuie sur `mod_dbd` pour spécifier le pilote de la base de données sous-jacente et les paramètres de connexion, mais aussi pour gérer les connexions à la base de données.

Si l'on utilise `mod_auth_basic` ou `mod_auth_digest`, on peut invoquer ce module en affectant la valeur `dbd` à la directive `AuthBasicProvider` ou `AuthDigestProvider`.

### Sujets

- Performances et mise en cache
- Exemple de configuration
- Mise à disposition des informations de connexion
- Prévention contre les injections SQL

### Directives

### Traitement des bugs

- Journal des modifications de httpd
- Problèmes connus
- Signaler un bug

### Voir aussi

- `AuthName`
- `AuthType`
- `AuthBasicProvider`
- `AuthDigestProvider`
- `DBDriver`
- `DBDParams`
- Formats de mots de passe

## Performances et mise en cache ¶

Certains utilisateurs de l'authentification DBD sous HTTPD 2.2/2.4 ont signalé une charge problématique au niveau de la base de données. Cela se produit en général lorsqu'une page HTML contient des centaines d'objets (comme des images, des scripts, etc...), chacun d'entre eux nécessitant une authentification. Les utilisateurs qui rencontrent ce genre de problème peuvent utiliser le module `mod_authn_socache` qui permet de mettre les données d'authentification en cache, et soulager ainsi la base de données de la plus grande partie de la charge.

## Exemple de configuration ¶

Voici un exemple simple d'utilisation de ce module dans un contexte d'authentification et de bases de données.

    # configuration de mod_dbd modifiée pour inclure la mise en cache de
    # l'authentification
    DBDriver pgsql
    DBDParams "dbname=apacheauth user=apache password=xxxxxx"

    DBDMin  4
    DBDKeep 8
    DBDMax  20
    DBDExptime 300

    <Directory "/usr/www/mon-serveur/private">
      # configuration de mod_authn_core et mod_auth_basic
      # pour mod_authn_dbd
      AuthType Basic
      AuthName "Mon serveur"

      # Pour mettre en cache les données d'authentification, placez socache
      # avant dbd
      AuthBasicProvider socache dbd

      # Aussi nécessaire à la mise en cache : dire au cache de mettre en
      # cache les recherches dbd !
      AuthnCacheProvideFor dbd
      AuthnCacheContext mon-serveur

      # configuration de mod_authz_core
      Require valid-user

      # la requête SQL de mod_authn_dbd pour authentifier un utilisateur
      AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"
    </Directory>

## Mise à disposition des informations de connexion ¶

Pour chaque requête envoyée au serveur de base de données, toutes les valeurs de colonnes du premier enregistrement renvoyé par la requête sont affectées à des variables d'environnement avec le préfixe "AUTHENTICATE_".

Par exemple, si une requête renvoie un nom d'utilisateur, un nom complet et un numéro de téléphone, un programme CGI pourra accéder à ces informations sans avoir besoin d'effectuer une deuxième requête vers la base de données.

Ceci va entraîner une simplification considérable du code et de la configuration nécessaire de certaines applications web.

## Prévention contre les injections SQL ¶

Selon le driver DBD et le serveur d'arrière-plan que vous utilisez, vous devrez prendre garde à la sécurité dans le domaine SQL. Avec la plupart des drivers, vous n'avez rien à faire : la requête est préparée par la base de données au démarrage, et l'entrée utilisateur n'est utilisée qu'en tant que donnée. Mais vous aurez peut-être à nettoyer cette entrée. Au moment où ces lignes sont écrites, le seul driver qui peut nécessiter le nettoyage de l'entrée est FreeTDS.

Veuillez vous référez à la documentation de `mod_dbd` pour plus d'informations à propos de la sécurité dans ce domaine.

## Directive AuthDBDUserPWQuery ¶

Description: | Requête SQL servant à vérifier le mot de passe d'un utilisateur
Syntaxe: | `AuthDBDUserPWQuery requête`
Contexte: | répertoire
Statut: | Extension
Module: | mod_authn_dbd

La directive `AuthDBDUserPWQuery` permet de spécifier une requête servant à vérifier le mot de passe d'un utilisateur donné. L'identifiant utilisateur sera transmis comme paramètre sous forme d'une seule chaîne de caractères lorsque la requête sera exécutée. Cet identifiant est référencé dans la requête en utilisant le spécificateur de format `%s`.

    AuthDBDUserPWQuery "SELECT password FROM authn WHERE user = %s"

La première colonne du premier enregistrement renvoyé par la requête se présentera sous la forme d'une chaîne de caractères contenant le mot de passe chiffré. Les enregistrements suivants sont ignorés. Si aucun enregistrement n'est renvoyé, l'utilisateur ne sera pas authentifié par `mod_authn_dbd`.

Toute valeur de colonne supplémentaire du premier enregistrement renvoyé par la requête sera stockée dans une variable d'environnement dont le nom aura la forme `AUTHENTICATE_valeur-colonne`.

Le format du mot de passe chiffré dépend du frontal d'authentification utilisé (par exemple `mod_auth_basic` ou `mod_auth_digest`). Voir la documentation sur les Formats de mots de passe pour plus de détails.

## Directive AuthDBDUserRealmQuery ¶

Description: | Requête SQL servant à vérifier une empreinte de mot de passe pour un utilisateur et un identifiant d'authentification.
Syntaxe: | `AuthDBDUserRealmQuery requête`
Contexte: | répertoire
Statut: | Extension
Module: | mod_authn_dbd

La directive `AuthDBDUserRealmQuery` spécifie une requête SQL servant à vérifier une empreinte de mot de passe pour un utilisateur et un identifiant d'authentification donnés au cours d'un processus d'authentification digest. Les identifiants de l'utilisateur et de l'authentification sont passés dans cet ordre comme paramètres à l'exécution de la requête. Ils sont référencés dans la chaîne de la requête en utilisant des spécificateurs de format `%s`.

    AuthDBDUserRealmQuery "SELECT password FROM authn WHERE user = %s AND realm = %s"

La première colonne du premier enregistrement renvoyé par la requête se présentera sous la forme d'une chaîne de caractères contenant le mot de passe chiffré. Les enregistrements suivants seront ignorés. Si aucun enregistrement n'est renvoyé, l'utilisateur ne sera pas authentifié par `mod_authn_dbd`.

Toute valeur de colonne supplémentaire du premier enregistrement renvoyé par la requête sera stockée dans une variable d'environnement avec un nom de la forme `AUTHENTICATE_COLONNE`.

Le format du mot de passe chiffré dépend du frontal d'authentification utilisé (par exemple `mod_auth_basic` ou `mod_auth_digest`). Voir la documentation sur les Formats de mots de passe pour plus de détails.