为什么网站倾向于在数据库表上使用随机id:s?

19 php mysql

我想知道为什么许多网站选择使用随机id:s而不是在数据库表上从1递增.我没有找到任何正当理由进行搜索,有没有?

另外,哪种方法最好?在插入数据之前检查id是否已经存在似乎效率很低(进行第二次查询).

谢谢你的帮助!

Mic*_*ski 9

在引擎盖下,他们可能正在使用数据库中的增量ID来识别行,但是通过URL参数向最终用户公开的值通常被制成随机字符串,以使可用对象的序列更难以猜测.

通过默默无闻,这确实是一个安全问题.它阻碍了自动脚本继续通过增量值并通过URL尝试攻击,并且阻碍了对站点内容的自动抓取.

例如,如果youtube使用增量ID而不是像这样的值v=HSsdaX4s,则可以通过简单地开始v=1并将该值递增数百万次来下载每个值.

  • @lawls在大规模,可能有计算节省索引整数字段,特别是考虑到它们可能在许多其他相关表中用作外键列,而不仅仅是主表.实际上,增量ID只是许多,许多Web框架和ORM的默认行为,以及RDBMS的本机行为,用于生成自动增量ID并在"INSERT"之后立即返回它们.因此,在小规模的情况下,您只需获得不必重新配置ORM的便利.您仍然需要编写算法以生成字符串ID. (2认同)