2009-10-05 71 views

回答

2

SELECT CHECKSUM(NEWID())爲您提供了一個基於GUID的32位有符號整數。您可以使用此作爲基礎:這幾乎是最好的SQL方式

你可以用它來種子RAND(因爲RAND是在一個單一的所有行一樣選擇

SELECT RAND(CHECKSUM(NEWID())) 

有符號的64位。整數

SELECT CAST(CHECKSUM(NEWID()) as bigint) * CAST(CHECKSUM(NEWID()) as bigint) 

與你周圍的一些遊戲可以施放和/或連接來獲得二進制(「4的倍數」)等,以建立一個字節數組...我已經不使用RAND啄儘管直接效仿

+0

這符合我們的需要,因爲密碼隨機性不是目標;真正的目標是獲得大量的隨機數。謝謝。 – 2009-10-05 21:40:43

1

如果您必須生成cryptographycally secure random numbers(如用於散列的鹽),那麼您應該使用CLR函數。對於加密操作,Checksum,guids等是不安全的。

最簡單的解決方案是使用調用RNGCryptoServiceProvider的CLR scalar function

請注意,許多SQL Server crpto函數(如EncryptByKey)已經使用加密安全生成的鹽(除了RC4算法上的EncryptByKey,SQL中已損壞)對輸入進行醃製。

相關問題