gpt4 book ai didi

sql - NEWSEQUENTIALID 的可预测性如何?

转载 作者:行者123 更新时间:2023-12-02 22:35:34 26 4
gpt4 key购买 nike

根据Microsoft's documentation on NEWSEQUENTIALID ,NEWSEQUENTIALID 的输出是可预测的。但可预测性如何呢?假设我有一个由 NEWSEQUENTIALID 生成的 GUID,那么:

  • 计算下一个值?
  • 计算之前的值?
  • 计算第一个值?
  • 即使根本不知道任何 GUID,也要计算第一个值吗?
  • 计算行数?例如。使用整数时,/order?id=842 告诉我应用程序中有 842 个订单。

下面是一些关于我正在做的事情以及各种权衡的背景信息。

使用 GUID 相对于整数作为主键的安全优势之一是 GUID 很难猜测。例如。假设黑客看到像 /user?id=845 这样的 URL,他可能会尝试访问 /user?id=0,因为数据库中的第一个用户很可能是是管理用户。此外,黑客可以迭代 /user?id=0..1..2 来快速收集所有用户。

同样,整数的隐私缺点是它们会泄漏信息。 /order?id=482 告诉我,该网上商店自实现以来已有 482 个订单。

不幸的是,使用 GUID 作为主键具有众所周知的性能缺点。为此,SQL Server 引入了NEWSEQUENTIALID 函数。在这个问题中,我想了解 NEWSEQUENTIALID 的输出的可预测性如何。

最佳答案

底层操作系统功能是 UuidCreateSequential 。该值源自您的网卡 MAC 地址之一和 per-os-boot incremental value 。请参阅RFC4122 。 SQL Server 做了一些byte-shuffling使结果正确排序。因此,从某种意义上说,该值(value)是高度可预测的。具体来说,如果您知道一个值,您可以立即预测相似值的范围。

但是,我们无法预测 id=0 的等价物,也无法预测 52DE358F-45F1-E311-93EA-00269E58F20D 表示商店至少售出 482 件商品.

唯一“批准”的随机生成是 CRYPT_GEN_RANDOM (其中包含 CryptGenRandom )但这显然是一个可怕的关键候选者。

关于sql - NEWSEQUENTIALID 的可预测性如何?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24158118/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com