Zgodnie z Microsoft's documentation on NEWSEQUENTIALID
, wyjście NEWSEQUENTIALID jest przewidywalne. Ale jak przewidywalne jest przewidywalne? Załóżmy, że mam identyfikator GUID, który został wygenerowany przez NEWSEQUENTIALID
, jak trudno byłoby:Jak przewidywalny jest NEWSEQUENTIALID?
- Oblicz następną wartość?
- Obliczyć poprzednią wartość?
- Oblicz pierwszą wartość?
- Oblicz pierwszą wartość, nawet nie znając żadnych identyfikatorów GUID?
- Oblicz liczbę rzędów? Na przykład. podczas korzystania z liczb całkowitych,
/order?id=842
mówi mi, że w aplikacji jest 842 zamówień.
Poniżej znajduje się kilka podstawowych informacji o tym, co robię i jakie są różne kompromisy.
Jedną z zalet zabezpieczenia GUID w postaci liczb całkowitych jako kluczy podstawowych jest to, że identyfikatory GUID są trudne do odgadnięcia. Na przykład. powiedzmy, że haker widzi adres URL taki jak /user?id=845
, mógłby spróbować uzyskać dostęp do /user?id=0
, ponieważ jest prawdopodobne, że pierwszy użytkownik w bazie danych jest administratorem. Co więcej, haker może iterować ponad /user?id=0..1..2
, aby szybko zebrać wszystkich użytkowników.
Podobnie, wadą liczb całkowitych z jest to, że powodują one wyciek informacji. /order?id=482
mówi mi, że od momentu wdrożenia sklep internetowy ma 482 zamówienia.
Niestety, używanie identyfikatorów GUID jako kluczy podstawowych ma znane wady w zakresie wydajności . W tym celu SQL Server wprowadził funkcję NEWSEQUENTIALID
. W tym pytaniu chciałbym się dowiedzieć, jak przewidywalny jest wynik NEWSEQUENTIALID
.
Doskonała i dokładna reakcja! –