【问题标题】:Running managed code in SQL Server 2008 - any issues?在 SQL Server 2008 中运行托管代码 - 有什么问题吗?
【发布时间】:2010-07-29 18:56:08
【问题描述】:

我想知道与通过 SQL Server 2008 运行托管代码相关的性能问题。我听说过一些内存和速度问题。

具体来说,我想实现一个 SHA256 散列 DLL 并使用 SQL Server 2008 将其作为存储过程执行。

或者,我可以简单地从我的 .Net 应用程序执行散列,然后将字符串传递给我的存储过程。

优点/缺点?

谢谢。

【问题讨论】:

  • 新的空间特征是使用 CLR 实现的。因此,这至少表明 MS 对 CLR 有足够的信心来实现一个重要的新功能,该功能也需要表现良好。
  • 没有适合的内置加密方法吗?
  • 请问,我需要实现 SHA256 或更高级别的加密,据我所知,这在 SQL Server 2008 的收缩包装版本中不可用。
  • 您使用的是 32 位还是 64 位?如果是 32 位,我认为您可能会遇到memtoleave 分配太小的问题。
  • SHA256 是一种散列算法。散列与加密无关,因此请正确使用您的术语。

标签: c# .net sql-server stored-procedures managed-code


【解决方案1】:

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 内容。这样可以减少您的维护工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 2010-09-10
    • 2011-09-10
    • 2018-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多