Sql-Server

在 SQL Server 中安全地生成 UNIQUEIDENTIFIER

  • February 20, 2022

我打算使用 aUNIQUEIDENTIFIER作為訪問密鑰,使用者可以使用它來訪問某些數據。從這個意義上說,密鑰將充當密碼。

我需要生成多個這樣的標識符作為INSERT...SELECT語句的一部分。出於架構原因,我想在這種情況下在伺服器端生成標識符。

如何生成安全隨機UNIQUEIDENTIFIER?請注意,這NEWID不夠隨機,因為它根本不承諾任何安全屬性。我正在尋找System.Security.Cryptography.RandomNumberGenerator的 SQL Server 等效項,因為我需要不可猜測的 ID。任何基於CHECKSUM或的東西RAND也不GETUTCDATE符合條件。

SELECT CAST(CRYPT_GEN_RANDOM(16) AS UNIQUEIDENTIFIER)

應該做我想的伎倆。

CRYPT_GEN_RANDOM

返回由 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 位熵的範圍內。

引用自:https://dba.stackexchange.com/questions/39239