Выполнение управляемого кода в SQL Server 2008 - какие-либо проблемы?

Я хотел бы знать проблемы производительности, связанные с выполнением управляемого кода через SQL Server 2008. Я услышал о некоторых проблемах памяти и скорости.

А именно, я хочу реализовать SHA256, хеширующий DLL и выполнить его как sproc с SQL Server 2008.

Поочередно, я мог просто выполнить хеширование из своего приложения .NET, затем передать строку моему sprocs.

Профессионалы/недостатки?

Спасибо.

1
задан Tim S. Van Haren 30 July 2010 в 16:38
поделиться

1 ответ

SQLCLR довольно быстрый. Используйте его, если вам явно необходимо выполнить код CLR в T-SQL. Например, предположим, что вы пишете функцию 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, при обновлении / развертывании приложения вам не нужно будет помнить об обновлении / развертывании материала CLR в SQL Server. Это сокращает ваши усилия по обслуживанию.
2
ответ дан 2 September 2019 в 22:36
поделиться