Un compañero de trabajo me hizo conocer un comportamiento MySQL muy extraño.¿Por qué el aumento automático de MySQL aumenta en las inserciones fallidas?
Suponiendo que tiene una tabla con un campo auto_increment y otro campo que se establece en único (por ejemplo, un campo de nombre de usuario). Al intentar insertar una fila con un nombre de usuario que ya está en la tabla, la inserción falla, como se esperaba. Sin embargo, el valor de auto_increment aumenta como se puede ver cuando inserta una nueva entrada válida después de varios intentos fallidos.
Por ejemplo, cuando nuestra última entrada se parece a esto ...
ID: 10
Username: myname
... y tratamos cinco nuevas entradas con el mismo valor de nombre de usuario en nuestra próxima inserción habremos creado una nueva fila como por lo que:
ID: 16
Username: mynewname
Si bien esto no es un gran problema en sí mismo parece como un vector de ataque muy tonto para matar a una mesa inundándolo con las solicitudes de inserción fallidos, como los MySQL Reference Manual establece:
"El comportamiento del mecanismo de autoincremento no se define [...] si el valor es mayor que el entero máximo que se puede almacenar en el tipo de entero especificado".
¿Este comportamiento es esperado?
Su vector de ataque parece un no tema. Si pudiera inundarlo con solicitudes de inserción fallidas, ¿no podría igualmente inundarlo con solicitudes no fallidas? –
¿Puedes traer un ** código ** de reproducción en lugar de explicaciones manuales? –
@martin smith: Si bien es cierto, creo que un aumento repentino de nuevos usuarios sería más obvio que un aumento silencioso en el autoincremento que muy bien podría quedarse en el camino si no se verifica. – Sorcy