【发布时间】:2014-06-11 08:29:38
【问题描述】:
根据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 的输出的可预测性。
【问题讨论】:
标签: sql sql-server primary-key guid newsequentialid