在 SQL Server 中安全地生成 UNIQUEIDENTIFIER
我打算使用 a
UNIQUEIDENTIFIER
作為訪問密鑰,使用者可以使用它來訪問某些數據。從這個意義上說,密鑰將充當密碼。我需要生成多個這樣的標識符作為
INSERT...SELECT
語句的一部分。出於架構原因,我想在這種情況下在伺服器端生成標識符。如何生成安全隨機
UNIQUEIDENTIFIER
?請注意,這NEWID
不夠隨機,因為它根本不承諾任何安全屬性。我正在尋找System.Security.Cryptography.RandomNumberGenerator的 SQL Server 等效項,因為我需要不可猜測的 ID。任何基於CHECKSUM
或的東西RAND
也不GETUTCDATE
符合條件。
SELECT CAST(CRYPT_GEN_RANDOM(16) AS UNIQUEIDENTIFIER)
應該做我想的伎倆。
返回由 Crypto API (CAPI) 生成的加密隨機數。
根據https://blogs.msdn.microsoft.com/sqlprogrammability/2006/03/23/newsequentialid-histrorybenefits-and-implementation/,NEWID() 函式只是包裝了 Windows 函式 CoCreateGuid,它返回一個 v4 樣式的 GUID . 根據https://msdn.microsoft.com/en-us/library/bb417a2c-7a58-404f-84dd-6b494ecf0d13#id11,自 1999 年的 Windows 2000 以來,
“Windows 中內置的所有版本 4 GUID 的隨機位是通過 Windows CryptGenRandom 加密 API 或等效的,用於生成加密密鑰的相同來源獲得”
所以我想說你可以考慮 NEWID() 加密安全 - 至少在它提供的 122 位熵的範圍內。