根據Microsoft's documentation on NEWSEQUENTIALID
,NEWSEQUENTIALID的輸出是可預測的。但是,可預見的可預測性如何?假設我有一個由NEWSEQUENTIALID
生成的GUID,它將如何難以:NEWSEQUENTIALID的可預測性如何?
- 計算下一個值?
- 計算以前的值?
- 計算第一個值?
- 計算第一個值,即使不知道任何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
的輸出是多麼可預測。
優秀而徹底的迴應! –