2010-07-29 77 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内容。这减少了您的维护工作。