¿Es normal tener un usuario con uid de 0 en la tabla de usuarios?
Es normal, ya que Drupal crea esa entrada cuando se instala, para el usuario anónimo. Eso se hace desde user_install () (Drupal 7) o system_install () , que contiene el siguiente código.
// Drupal 7.
// Insert a row for the anonymous user.
db_insert('users')
->fields(array(
'uid' => 0,
'name' => '',
'mail' => '',
))
->execute();
// Drupal 6.
// Inserting uid 0 here confuses MySQL -- the next user might be created as
// uid 2 which is not what we want. So we insert the first user here, the
// anonymous user. uid is 1 here for now, but very soon it will be changed
// to 0.
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
// …
// This sets the above two users uid 0 (anonymous). We avoid an explicit 0
// otherwise MySQL might insert the next auto_increment value.
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Esa entrada se usa normalmente cuando se unen los datos contenidos en la tabla "nodo" con los datos contenidos en la tabla "usuarios".
No tener esa entrada podría causar que Drupal no funcione correctamente en algunas circunstancias.
Si necesita restaurar los datos de usuario anónimo en la base de datos, ejecutaría un código similar al que se ejecuta desde Drupal. En particular, para Drupal 6, ejecutaría el siguiente código.
Si los datos para los usuarios anónimos ya existen en la base de datos, pero el ID de usuario no es 0:
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Si los datos para el usuario anónimo no existen, incluso con la ID de usuario incorrecta:
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
Si desea restaurar automáticamente los datos anónimos del usuario, puede implementarlos hook_cron()
en un módulo personalizado y ejecutar un código similar al siguiente. (El código es para Drupal 6.)
function mymodule_cron() {
$uid = db_result(db_query("SELECT uid FROM {users} WHERE name = '%s'", ''));
if ($uid === FALSE) {
// The data has not been found in the database; re-create the row.
db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
}
db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
}
Si le da al módulo un peso menor, su implementación hook_cron()
se ejecutará antes que las otras implementaciones, y esto evitaría que fallaran debido a la fila faltante en la base de datos.
INSERT INTO users (uid, name, mail) VALUES(0, '', '')
Por defecto, el usuario anónimo es 0 y este es el primer usuario presente en la tabla de usuarios al momento de instalar drupal y la identificación de administrador será 1 y será el segundo usuario en la tabla de usuarios.
fuente