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
Это лучше по нескольким причинам:
- Вы не помещаете бизнес-логику в SQL Server, где будет сложно протестировать.
- Сам запрос гораздо менее сложен, поэтому SQL Server будет выполнять меньше работы и, следовательно, будет быстрее.
- Установка SQLCLR может быть проблемой (SQLCLR по умолчанию выключен). Развертывание ваших сборок в SQL Server может быть проблематичным, особенно если у вас нет прямого доступа к производственному серверу.
- Если вы не используете SQLCLR, при обновлении / развертывании приложения вам не нужно будет обновлять / развертывать компоненты CLR в SQL Server. Это уменьшает ваши усилия по обслуживанию.