Как MySQL узнает, какой алгоритм использовать при чтении логинов, хранящихся в mysql.user?

Я вижу, что MySQL 5.5 позволяет использовать SHA-2() для установки паролей, и что прямые хэши MD5 небезопасны и больше не должны использоваться (то же самое для функции PASSWORD по умолчанию).

Прежде чем я с удовольствием совершу ОБНОВЛЕНИЕ и сменю кучу паролей, как MySQL узнает, какой алгоритм использовать для проверки предоставленного мной пароля? Знает ли он волшебным образом, какой алгоритм использовался для шифрования пароля пользователя, или мы указываем это в файле conf?

ОБНОВЛЕНИЕ: я протестировал новую учетную запись, чтобы посмотреть, что произойдет. Использование PASSWORD('mypass') работает, однако применение SHA1('mypass') приводит к тому, что эта учетная запись не может войти в систему.


person a coder    schedule 25.10.2011    source источник
comment
Я считаю, что функция PASSWORD использует несколько итераций (возможно, 2?) SHA1, поэтому ваш тест не сработал.   -  person Eric Petroelje    schedule 26.10.2011
comment
Попробуй это. Помимо ведущего «*», это должно работать. ВЫБЕРИТЕ ПАРОЛЬ («foo»), ПРОПИСНАЯ (SHA1 (UNHEX (SHA1 («foo»)))))   -  person Eric Petroelje    schedule 26.10.2011


Ответы (1)


Вероятно, по длине хеша, хранящегося в таблице. Хэш MD5 будет состоять из 128 бит, хэш SHA1 будет состоять из 160 бит, а хэш SHA2 будет состоять как минимум из 224 бит.

person Eric Petroelje    schedule 25.10.2011
comment
Интересно, что поле пароля mysql (по-видимому, по умолчанию) недостаточно велико для обработки паролей SHA2: данные усечены для столбца «Пароль» в строке 5. - person a coder; 25.10.2011