Бывают ситуации, когда вы можете хранить ясные текстовые пароли, поэтому я не буду повторять советы, которые есть у всех остальных, хотя обычно это звук.
Помимо установки сортировки, вы можете также использовать VARBINARY трюк как так:
WHERE
CAST(Password as varbinary(20)) = CAST(@Password as varbinary(20)) AND
CAST(Username as varbinary(20)) = CAST(@Username as varbinary(20))
выше будет также привести в случае чувствительного поиска - просто помните, чтобы установить длину VARBINARY к тому же, как поле длины.
Чтобы избежать индекса сканирования, вы можете включить поиск без учета регистра, а также - что сделает индекс поиска и впоследствии выполнить поиск VARBINARY:
WHERE
Password = @Password AND
Username = @Username AND
CAST(Password as varbinary(20)) = CAST(@Password as varbinary(20)) AND
CAST(Username as varbinary(20)) = CAST(@Username as varbinary(20))
И согласно HTTP: //security.stackexchange .com/q/963/485, больше не используйте MD5. –
@Rory - Я бы никогда не предложил md5-- HashBytes() поддерживает пару вариантов sha. Но это все еще старое - оно не поддерживает bcrypt, и если вы не используете bcrypt, вы делаете это неправильно. –
Да - это v. Старый. Я думал, что этот ответ был с апреля '10, не в апреле 2009 года. bcrypt полностью :-) –