Why do web sites tend to use random id:s on database tables?
我想知道为什么许多网站选择使用随机id:s而不是从数据库表的1递增。我没有找到任何好的理由,有没有?
另外,哪种方法是最好的?在插入数据之前检查ID是否已经存在似乎效率很低,(需要第二个查询)。
谢谢你的帮助!
- 只是为了避免基于增量值集的任何安全威胁
- 如果向客户机公开事务速率,则递增的ID会泄漏有关事务速率的信息。例如,每天注册的新用户数。
- "随机"ID还是guid ID?
在引擎盖下,它们可能使用数据库中的增量ID来标识行,但通过URL参数向最终用户公开的值通常被制成一个随机字符串,以使可用对象的序列更难猜测。
这真的是一个通过默默无闻的安全问题。它阻碍了自动化脚本通过增量值进行操作,并试图通过URL进行攻击,还阻碍了网站内容的自动抓取。
例如,如果YouTube使用的是增量ID,而不是像v=HSsdaX4s这样的值,那么只需从v=1开始,并将该值增加数百万次,就可以下载每个ID。
- 增量ID的意义是什么?从表中获取行时,将使用v=hssdax4s。那么,是否确实需要增量ID?
- @在大规模的法律中,索引整数字段可能会节省计算成本,特别是考虑到它们可能被用作许多其他相关表中的外键列,而不仅仅是主表。实际上,增量ID只是许多许多Web框架和窗体的默认行为,也是RDBMS生成自动增量ID并在INSERT之后立即返回这些ID的本地行为。因此,在小范围内,您只需要真正获得不必重新配置ORM的便利。您仍然需要编写生成字符串ID的算法。
顺序ID不能很好地扩展(它们在分布式系统中成为同步瓶颈)。
另外,您不需要检查新生成的随机ID是否已经存在,您可以假设它不存在(因为其中有很多)。
你确定身份证是随机的吗?或者它们是编码的?不管怎样,都是为了安全。
- 我不知道它们是否是随机的,但堆栈溢出是一个完美的例子。可能没有ID为1的问题,据我所见,所有问题的ID:S都是8个数字。
- @皮尔斯-这个还是这个?只需按日期排序问题,然后转到最后一页。
- @马丁史密斯谢谢你,我错了。
- @Piers用户也从1递增。创始人掌握着早期的数据