users 테이블에서 uid가 0 인 사용자를 찾았습니다…


9

users 테이블에 uid가 0 인 사용자가 정상입니까?

답변:


17

Drupal이 익명 사용자를 위해 설치 될 때 해당 항목을 작성하는 것은 정상입니다. 다음 코드가 포함 된 user_install () (Drupal 7) 또는 system_install () 에서 수행됩니다.

  // 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'", '');  

이 항목은 일반적으로 "node"테이블에 포함 된 데이터를 "users"테이블에 포함 된 데이터와 결합 할 때 사용됩니다.

해당 항목이 없으면 Drupal이 일부 상황에서 올바르게 작동하지 않을 수 있습니다.

데이터베이스에서 익명 사용자 데이터를 복원해야하는 경우 Drupal에서 실행 된 것과 유사한 코드를 실행합니다. 특히 Drupal 6의 경우 다음 코드를 실행합니다.

  • 익명 사용자의 데이터가 이미 데이터베이스에 존재하지만 사용자 ID가 0이 아닌 경우 :

    db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
  • 잘못된 사용자 ID로도 익명 사용자의 데이터가 존재하지 않는 경우 :

    db_query("INSERT INTO {users} (name, mail) VALUES('%s', '%s')", '', '');
    db_query("UPDATE {users} SET uid = uid - uid WHERE name = '%s'", '');
    

익명 사용자 데이터를 자동으로 복원하려면 사용자 hook_cron()정의 모듈에서 구현 하고 다음과 유사한 코드를 실행할 수 있습니다. (코드는 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'", '');
}

모듈에 더 적은 가중치를 부여 hook_cron()하면 다른 구현 전에 해당 구현 이 실행되며 데이터베이스에서 행이 누락되어 실패하지 않습니다.


나는이 트위스트를 준비하지 않았습니다 ... : | 몇 가지 게시물에 왜 일부 게시물이 있는지 생각하면서 앉아있었습니다 (처음에는 내 버그의 버그라고 생각하고 단순히 제거했습니다 : O). 어떤 상황입니까? 그것에 대한 자료가 있습니까?
jayarjo 2016 년

나는 대답을 넓혔다. 일반적으로 노드 작성자에 대한 데이터를 가져올 때 사용됩니다.
kiamlaluno

1
또한 cron 및 기타 인스턴스를 실행할 때 불쾌한 경고가 발생합니다. 따라서 실제로 해당 행을 다시 추가해야합니다.
Berdir

3
익명 사용자를 복원해야하는 경우 데이터베이스에서이 SQL을 실행하면 충분합니다.INSERT INTO users (uid, name, mail) VALUES(0, '', '')
marcvangend

나는 그것이 어떤 종류의 해킹이라고 느꼈기 때문에 그것이 이상하다고 생각하고 그것을 제거했습니다. 그러나 이제 데이터베이스를 MYSQL40 호환 모드 (일부 바보 공유 호스팅 서버)로 내보내면서 다음 자동 증분 값 (7)으로 가져 왔습니다. 실수로이 일을 우연히 발견하지 않았다면, 나는 :(하지 못했습니다 ... 잘못된 시간의 무기한 금액에 대한 사라진 게시물에 대해 궁금해 될지 알지도 못하는 것
jayarjo

2

기본적으로 익명 사용자는 0이며 이는 drupal을 설치할 때 users 테이블에있는 첫 번째 사용자이며 관리자 ID는 1이며 users 테이블에서 두 번째 사용자가됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.