Authentification et BdD Drupal

Voici quelques tables qui interviennent pour l'authentification et la gestion des utilisateurs.

  • flood
  • users
  • users_data
  • users_field_data
  • user_roles
  • user_user_picture

La table "users_field_data"

Cette table compte 15 champs parmi lesquels :

  • uid (la clé primaire) ;
  • name : le nom d'ouverture de session
  • pass : le mot de passe n'apparait pas en clair dans la base de données. Depuis la V8, c'est le résultat d'une fonction de hachage qui apparait.
  • mail :le courriel de l'utilisateur

 

Cliquer pour agrandir l'image

 

Il n'est donc pas possible de trouver un mot de passe perdu  en consultant la base de données.
Pour résoudre ce problème, on ne peut  que remplacer ce "hachage" par le hachage d'un nouveau mot de passe (par exemple "123456") par la fonction de hachage que Drupal utilise. Cette fonction de hachage utilise un paramètre (le sel ou salt) qui est définit de manière aléatoire à chaque création d'un mot de passe. En savoir plus sur le salage d'un mot de passe.
 


Le fichier "password-hash.sh" qui se trouve dans le dossier core/scripts de votre installation de drupal permet de générer un hashage conforme. C'est un script PHP qui prend comme paramètre une liste de "mots" à hacher et rend le hachage de chacun des "mots" de la liste. Ces "hachages" pourront remplacer dans le champ "pass" de la table "users_field_data" ceux des utilisateurs ayant perdu leur  mot de passe.
Vous pouvez l'exécuter dans un terminal (DOS ou Linux suivant l'OS du serveur portant votre installation Drupal) par la commande
                     php chemin/password-hash.sh new_pass
ou chemin doit indiquer l'emplacement du fichier password-hash.sh dans votre installation et new_pass est une suite de mot de passe à hacher.
L'image ci-dessous présente dans sa partie supérieure la règle d'utilisation du script et dans sa partie basse, un exemple de l'utilisation qui génére le hachage des valeurs "abcdef" et"123456"

Cliquez pour agrandir l'image

Le compte d'uid = 0 est le compte de l' utilisateur "anonyme".
Le compte d'uid = 1 est le compte d'administrateur utilisé lors l'installation du site.
 

La table "user_user_picture"

Cette table liste les liens   id "utilisateurs" et id des photographies

  • entity_id : l'id du compte utilisateur correspondant à la photo
  • user_picture_target_id : l'id du fichier image de cette photo dans les tables file_..

La table "flood"

La table "flood" est illustrée ci-dessous. Elle liste les événements susceptibles de "paralyser" le site (comme les connexions échouées) pour par exemple. Dans cette table, figurent entre autres les champs

  1. event :
    • user.failed_login_IP : l'adresse IP du poste à l'origine de l'événement ;
    • user.failed_login_user : l' uid de l'utilisateur (cf : table user_data_field) à l'origine de l'événement
  2. identifier :
    • l'adresse IP du poste à l'origine de l'événement
    • l' uid de l'utilisateur - l'adresse IP du poste  ( uid  : cf. table user_data_field ) à l'origine de l'événement lorsque cet utilisateur est identifié dans la table
  3. l'heure de début (timestamp) et de fin (expiration) du blocage. Par défaut ce blocage dure 3600s

 

Cliquer pour agrandir l'image

Pour débloquer le compte d 'uid = 38, avant l'expiration de la durée de blocage, il faudra effacer l' (les) enregistrement(s) correspondant dans la table flood par la requête :
delete FROM `flood` where `identifier` like "%38-%"