Seite 1 von 1

Frage zur Vergabe von User-ID

Verfasst: 20.12.2006 08:29
von Geier0815
Moin, Moin,

ich stelle derzeit ein merkwürdiges Phänomen fest: Wenn ich User (in diesem Fall Spambots) "per zu Fuß" lösche, kann es passieren das die User-ID für einen neuen(?) User wiederverwendet wird.
Da aber die ID wohl per Autoinkrement vergeben wird, sollte das doch eigentlich unmöglich sein? Bei mir kam deshalb schon der Gedanke auf dass die Spambots inzwischen eine Möglichkeit aufgetan haben Accounts zu kapern, auch wenn ich das im Grunde für unmöglich halte.

Hat einer von euch schon Ähnliches beobachtet? Oder hat wer gar eine Erklärung für dieses Phänomen?

Verfasst: 20.12.2006 08:33
von Sanchez17
Hola,

soviel ich weiß, werden nicht mehr benutze ID´s wieder vergeben. Daher ist es möglich,bzw. wahrscheinlich, das die ID eines gelöschten Users wieder vergeben wird.

Stell dir mal vor, es wäre nicht so:

Bei großen Boards würden trotz vieler löschungen die ID´s riesige Zahlen werden.

Verfasst: 20.12.2006 08:42
von Dr.Death
Hi,

die Tabelle phpbb_users beinhaltet keinen auto_increment wert.


Bei der Registrierung wird vor Vergabe der nächsten User ID die höchste aktuell verwendete User ID ermittelt und um 1 erhöht.

Code: Alles auswählen

$sql = "SELECT MAX(user_id) AS total FROM " . USERS_TABLE;
[...]
$user_id = $row['total'] + 1;

Verfasst: 20.12.2006 09:42
von Geier0815
Alles klar!
Dann hab ich also den User gelöscht bevor sich ein weiterer neuer User registriert hat und deshalb wurde die ID wieder vergeben.

Vielen Dank!

Verfasst: 23.12.2006 00:57
von Geier0815
Ich hab jetzt mal eine doofe Frage: Die verwendete Funktion erzeugt gegenüber dem Autoinkrement doch einen erheblichen overhead ohne einen Vorteil zu bieten? Es muß doch erst eine Sortierung der IDs durchgeführt werden, während beim Autoinkrement der höchste Wert in einer Variablen gespeichert wird. In der Praxis wird sich das nicht bemerkbar machen, aber abgesehen von solchen "Sonderfällen" wie bei mir beschrieben, macht es keinen Unterschied da in beiden Fällen nicht die freigewordenen IDs unterhalb der Höchsten wiederverwendet werden. Wieso wird also eine solche Funtion verwendet?

Oder hab ich jetzt SQL falsch verstanden und einen echten Pfahl im Kopf?