SQL Server Management Studio: как редактировать значение MD5

У меня есть стол [user], созданный в SQL Server Management Studio, со следующей структурой:

id int PRIMARY NOT NULL  
login varchar(255) NOT NULL  
password varchar(32) NOT NULL  

Теперь я хочу вставить первого пользователя в базу данных. Щелкните правой кнопкой мыши на столе [user], выбирать Edit top 200 rows и введите новые пользовательские значения в сетку:

id    | login    | password
1     | admin    | MD5('admin') 

Но после сохранения вставленный пароль MD5('admin')но я ожидаю 21232f297a57a5a743894a0e4a801fc3 хэш.

Как я могу сделать это в Microsoft SQL Server Management Studio?

Спасибо

PS Я использую SQL Server 2008 Express 10.50.1600.1 и Microsoft SQL Server Management Studio 10.50.1600.1.

3 ответа

  1. хеш-значения - это байтовые массивы, а не символьные строки. Используйте VARBINARY тип столбца.
  2. Не вставляйте MD5 несоленных паролей. Для взлома онлайн хэша пароля требуется 2,96 секунды. Используйте правильно посоленный пароль и запишите соль в таблицу.
  3. Right click to table [user], choose Edit top 200 rows and type new user values into the grid, Ну, что вы ожидаете? Редактирование таблицы - это функция для ввода значений, и если вы вводите строку MD5('admin') тогда значение в таблице будет... MD5('admin'), Это не интерактивный оценщик функций (за исключением того, что MD5 не является функцией SQL Server...)

Не изобретайте велосипед заново, особенно не изобретайте защитное колесо, если вы не говорите на крипто беглом языке. Большинство структур имеют модули для управления членством. Например. Введение в членство.

Вы не можете выполнять запросы в таблицах сетки, вы должны выполнить запрос, чтобы сделать обновление. Для расчета MD5 вы можете использовать:

CONVERT(VARCHAR(32), HashBytes('MD5', 'admin'), 2)

Edit Top 200 Rows Функция предназначена для интерактивного ввода данных, где принимаются только значения, а не выражения, которые необходимо оценить перед сохранением.

Если вы хотите, чтобы фактическое введенное значение было результатом выражения, используйте окно запроса для вставки данных. (Я не знаю, использовали ли вы Edit функция только потому, что вы хотели попробовать эту функцию или по какой-то другой причине, но если это было потому, что вы не знали, как вставить данные с помощью SQL, посмотрите это руководство.)

Кроме того, как правильно заметил @Damien, нет MD5 функция в Transact-SQL. Есть один называется HASHBYTES, который может использовать различные алгоритмы хеширования, в том числе MD5. Но результат этой функции varbinary не varchar, Для MD5 конкретно это varbinary(16), Для хранения прямого результата HASHBYTES поэтому вам необходимо изменить тип password столбец соответственно.

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

INSERT INTO user (id, login, password)
VALUES (1, 'admin', HASHBYTES('MD5', 'admin'));

Чтобы быть справедливым, вы можете опустить изменение типа столбца, в этом случае вам придется заменить простой HASHBYTES звоните как выше с одним, как в ответе @Garath. Нужно ли хранить хеши как varchar(32) вместо varbinary(16) это совсем другой вопрос.

Другие вопросы по тегам