2010-07-29 58 views
1

我想知道與通過SQL Server 2008運行託管代碼相關的性能問題。我聽說過一些內存和速度問題。在SQL Server 2008中運行託管代碼 - 任何問題?

具體來說,我想實現一個SHA256散列DLL並執行它與SQL Server的一個存儲過程2008

或者,我可以簡單地從我的.net應用程序中執行的哈希,則該字符串傳遞給我的存儲過程。

優點/缺點?

謝謝。

+1

新的空間特徵是使用CLR實現的。因此,至少表明MS在CLR方面有足夠的信心實施一項重要的新功能,這項功能也需要表現良好。 – AaronLS 2010-07-29 19:01:35

+0

是否內置的加密方法都不適用? – 2010-07-29 19:04:57

+0

Will, 我需要實現SHA256或更高級別的加密,據我所知,SQL Server 2008的縮小版本無法使用。 – ElHaix 2010-07-29 19:20:20

回答

2

SQLCLR相當快。如果您明確需要在T-SQL中執行CLR代碼,請使用它。例如,假設您使用以下簽名編寫SQLCLR功能:

SqlString Hash(SqlString input) 

並且您設法讓它按照它應該的方式運行。你可以執行以下查詢:

IF EXISTS(SELECT * FROM Users WHERE HashedPassword = dbo.Hash(@userPassword) AND UserName = @userName) 
BEGIN 
    SELECT 'You''re alright, Jack.'; 
END 
ELSE 
BEGIN 
    SELECT 'Bogus.'; 
END 

如果你能設法散列在您的應用程序的假設密碼字段,你最好這樣做的應用程序中,並通過散列值到SQL Server運行查詢像這樣:

SELECT * 
FROM User 
WHERE UserName = @userName AND HashedPassword = @hashedPassword 

這是有幾個原因更好:

  1. 你是不是把業務邏輯到SQL Server,在那裏將是很難測試。
  2. 查詢本身並不複雜,所以SQL Server將會減少工作量,因此速度更快。
  3. 設置SQLCLR可能會很痛苦(默認情況下,SQLCLR已關閉)。將你的程序集部署到SQL Server中會很麻煩,特別是如果你沒有直接訪問生產服務器的話。
  4. 如果您不使用SQLCLR,那麼當您更新/部署應用程序時,您不必記得更新/部署SQL Server中的CLR內容。這減少了您的維護工作。