#mysql #stored-procedures #hash #passwords #bcrypt
#mysql #хранимые процедуры #хэш #пароли #bcrypt
Вопрос:
Я сохраняю свои пароли в виде хэша bcrypt в базе данных MySQL. С MD5 и SHA1 можно было запускать функцию хеширования внутри базы данных. Теперь мне интересно, возможно ли запустить bcrypt внутри MySQL. Я хотел бы создать учетную запись пользователя внутри базы данных.
Я не смог найти это в руководстве или я пропустил это? Может быть, как хранимая процедура?
Ответ №1:
Как только вы используете уникальную соль для каждого пароля (и сохраняете ее вместе с паролем), вы не сможете выполнить проверку в одном операторе SQL, особенно с помощью медленной хэш-функции.
На первом шаге мы должны сделать запрос, чтобы получить хэш-значение (и соль) по имени пользователя, затем на втором шаге мы можем проверить введенный пароль с помощью этого хэш-значения и той же соли. Если вы попытаетесь сделать это в одной инструкции SQL, базе данных придется вычислять хэш для каждой строки, пока не будет найдено совпадение, с медленной хэш-функцией, такой как BCrypt, этот запрос перегрузит ваш сервер.
Комментарии:
1. Спасибо. Я не упоминал, что думал только о создании учетной записи, а не о проверке входа.
2. @PiTheNumber — Создание само по себе действительно сработало бы, но когда я в последний раз проверял, я не нашел в MySQL какой-либо подходящей функции для хэширования паролей. На самом деле это было бы довольно сложно реализовать, потому что люди будут ожидать, что это сработает и для проверки, и тогда оптимизатору придется анализировать SQL и присваивать хэш-функции наименьший приоритет (и надеяться, что есть и другие фильтры, такие как username).