Resetear el password de un usuario en Drupal 7

Tecnología:

Recientemente realizé una actualización del sitio a Drupal 7 y entre los cambios que veo es que desde phpMyAdmin no se puede cambiar el password de un usuario como se venía haciendo en anteriores de Drupal. Las versiones anteriores de Drupal guardaban el password en hash del tipo MD5. Drupal 7 usa SHA512 (http://api.drupal.org/api/drupal/includes--password.inc/7/source).

Entonces pcurre que nos vemos en la necesidad de cambiar el password de algun usuario o hasta de nuestro administrador del sitio, pues por alguna razón no tenemos la contraseña y falla el proceso de recuperarla mediante el sistema propio de Drupal. O quizá queremos hackear una cuenta, ¿por qué no?

Anteriormente con entrar a phpMyAdmin y cambiar la constraseña del usuario bastaba, esto mediante la sentencia de SQL (en este caso para el usuario administrador del dominio:

UPDATE `users` SET `pass` = MD5('mynewpassword') WHERE `uid` =1;

Pero como Drupal 7 ya no usa MD5 para el cifrado de contraseñas, no funciona dicho procedimiento, por lo que tenemos que recurrir a otra forma de hacerlo. Para ello creamos un archivo de php en el sitio Web donde tenemos drupal instalado y le pegamos el siguiente contenido:

<?php
$pwd = 'nuestropassword';

define('DRUPAL_ROOT', getcwd());

require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
require_once DRUPAL_ROOT . '/' . variable_get('password_inc', 'includes/password.inc');

drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

header("Content-Type: text/plain; charset=utf-8");

echo user_hash_password($pwd);
?>

Donde 'nuestropassword' (sin las comillas) es el password en texto plano. 

Guardamos nuestro archivo y accedemos a la URL donde se encuentra dicho archivo, por ejemplo http://nuestrositio.com/prueba1.php

Lo anterior nos regresará una cadena que es el HASH generado de nuestro pasword, el cual deberemos copiar a nuestra sentencia de SQL en phpMyAdmin:

UPDATE users SET pass = '[hash]' WHERE uid = [1];

donde 'hash' es el hash que nos ha devuetlto nuestra página, en este caso prueba1.php. Como vemos, ahora no le hemos indicado que actualize el password usando MD5, como lo veníamos haciendo, sino que le pasamos el hash que generamos.

Si quisieramos cambiar el password de algun usuario mediante SQL (usando phpMyAdmin o desde línea de comandos, tendríamos que escribir:

UPDATE users SET pass = '[hash]' WHERE uid = [N];

Donde N es UID del usuario al que le queremos modificar el password.

La documentación referente a como cambiar el password del administrador del sitio donde hayamos instalado Drupal es http://drupal.org/node/68286. Aplica para Drupal 4.5.x or older, Drupal 4.6.x, Drupal 4.7.x, Drupal 5.x, Drupal 6.x. 

Para la versión 7 de Drupal , se ofrece el siguiente link del sitio drupal.org "Forgotten your Drupal 7 account password" http://drupal.org/node/1023428