MS SQL Server 2005 - нечувствительный к регистру пароль - PullRequest
1 голос
/ 25 апреля 2009

Я проверяю имя пользователя и пароль для входа в процедуру в MS SQL SERVER 2005. Поскольку SQL Server 2005 нечувствителен к регистру, даже если пользователь вводит пароль в нижнем регистре вместо пароля в верхнем регистре, система разрешает вход в систему.

Что мне делать ?? Есть ли в Sql Server 2005 какая-либо команда, которая может проверить то же самое?

Ответы [ 5 ]

3 голосов
/ 25 апреля 2009

Используйте сортировку с учетом регистра - например,

...where Password = @password COLLATE SQL_Latin1_General_CP1_CS_AS

и да, вам не следует хранить пароли в виде простого текста в базе данных!

1 голос
/ 25 апреля 2009

НИКОГДА НИКОГДА НЕ НИКОГДА хранить простые текстовые пароли! Сохраните хэш пароля и сравните его. Вы можете использовать функцию HashBytes () .

0 голосов
/ 25 апреля 2009

В некоторых ситуациях вам может понадобиться сохранить пароли в виде открытого текста, поэтому я не буду повторять совет, который дают все остальные, хотя обычно он звучит нормально.

Помимо установки параметров сортировки, вы также можете использовать трюк с varbinary следующим образом:

WHERE
  CAST(Password as varbinary(20)) = CAST(@Password as varbinary(20)) AND
  CAST(Username as varbinary(20)) = CAST(@Username as varbinary(20))

Приведенное выше также приведет к поиску с учетом регистра - просто не забудьте установить длину 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))
0 голосов
/ 25 апреля 2009

Используйте для сравнения сопоставление , например:

SELECT
  Id
FROM
  UserTable
WHERE
  UserName = @UserName
  AND Password = @Password COLLATE SQL_Latin1_General_Cp1_CS_AS

Используйте сопоставление, соответствующее набору символов столбца пароля.

Еще одна заметка - вы уверены, что хотите сохранить пароли в виде открытого текста в базе данных? Это хорошо в Топ-5 не делать, когда речь заходит о решениях безопасности.

0 голосов
/ 25 апреля 2009

SQL Server 2005 используется только для сопоставления по умолчанию с использованием сравнения без учета регистра. Вы не должны хранить пароли в открытом виде. Вы должны хешировать их с помощью достаточно безопасного алгоритма хеширования и хранить хеш. (возможно, вам действительно следует использовать значение соли, но давайте начнем с хеширования).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...