различное значение хэша между mysqladmin и функцией password () - PullRequest
0 голосов
/ 10 ноября 2011

Я скомпилировал и установил mysql-5.1.59 на сервер x86_64 linux.

Сначала я установил пароль root в cli и login:

$ bin/mysqladmin -uroot password 'somepass'
$ bin/mysql -uroot -p 'somepass'
mysql>

Войти успешно!

Затем я создал пользователя с помощью операторов SQL:

mysql> grant all privileges on mydb.* to 'myuser'@'localhost' identified by 'somepass';
mysql> flush privileges;

Пароль в точности совпадает с root.

Но после того, как я спросил:

mysql> select host,user,password from mysql.user;

Я заметил, что значения паролей двух учетных записей не совпадают . И я попытался войти в MySQL с Myuser, но не удалось.

Кстати, если я изменю пароль root таким образом:

mysql> update mysql.user set password=PASSWORD('somepass') where user='root';
mysql> flush privileges;

Тогда я больше не могу войти в MySQL через root:

$ bin/mysql -uroot -p
Enter password: 
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

Это никогда не происходит на других моих серверах. Кажется, проблема связана с ОС. Как хэшированные значения могут отличаться друг от друга? Спасибо!

1 Ответ

0 голосов
/ 10 ноября 2011

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

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

Из Википедии:

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

...