我的同事刚刚让我注意到一个非常奇怪的MySQL行为。
假设您有一张带自增字段和另一个设为唯一的字段的表(例如,用户名字段)。当尝试插入一个已经存在于表中的用户名时,插入操作失败,这是预期的行为。然而,当您在多次插入失败后插入一个有效的新条目时,可以看到自增值已经增加了。
例如,当我们的最后一个条目看起来像这样时...
ID: 10
Username: myname
如果我们使用相同的用户名值尝试插入五个新条目,下一次插入时将会创建一个新行,如下所示:
ID: 16
Username: mynewname
虽然这本身不是一个大问题,但通过使用大量的失败插入请求来淹没表格似乎是一种非常愚蠢的攻击方式。正如MySQL参考手册所述:
“如果[...]该值变得大于可存储在指定整数类型中的最大整数,则自动增量机制的行为未定义。”这是否是预期行为?