|
|
|
|
Главная |
|
Новости |
|
Статьи |
|
Шпаргалки |
|
Файлы |
|
О проекте |
|
Форум |
|
Футболки |
|
|
|
FREEhost.com.ua - купил хостинг 10 у.е. на Begun в подарок.
iName.com.ua - регистрация доменных имен и хороший хостинг.
Библиотека программиста - нужный вам исходник или документация по необходимому для вас языку программирования.
Designclub - Клуб дизайнеров Украины.
|
|
|
Регистрация доменов
Хостинг |
|
|
|
|
|
Путь: Шпаргалки
Шпаргалки
Автор: - 4m@t!c
Дата публикации - 23.02.2006
Просмотров: - 5361
MySQL :: Ошибка при подключении к серверу: Client does not support authentication protocol
[b]Ошибка при подключении к серверу: Client does not support authentication protocol[/b]
Начиная с версии 4.1, в MySQL используется новый протокол аутентификации. В новом протоколе алгоритм хеширования данных аутентифмкации отличается от алгоритма более ранних версий сервера MySQL. По сути вся проблема сводится к тому, что хеш пароля "[i]mypass[/i]" в версиях старше 4.1 (т.е. 4.1.*, 5.0.* и т.д.) имеет вид [b] *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4[/b] (строка длиннее 41 байта), и тот же пароль "[i]mypass[/i]" в версиях младше 4.1. (т.е. 4.0.*, 3.23.* и т.д.) имеет вид [b]6f8c114b58f2ce9e[/b] (строка 16 байт)
Теперь возникает ситуация. Вы обновляете сервер до версии старше 4.1., а клиент у Вас остается старый. Вы все правильно установили, сервер нормально запустился. Вы запускаете клиента, вводите логин и пароль соответствующей учетной записи, нажимаете Enter, Ваш [b][u]СТАРЫЙ[/u][/b] клиент хеширует данные авторизации по [b][u]СТАРОМУ[/u][/b] алгоритму и передает их на сервер. Сервер принимает эти данные и сранивает их с данными из таблицы [u]mysql.user[/u]. В результате такого сравнения сервер видит, что хеши паролей не совпадают (всего 16 байт, вместо ожидаемых, как минимум, 41-го байта). Вследствие чего, сервер выдает вполне информативное сообщение:
[sql]
- Client does not support authentication protocol requested by server;
- consider upgrading MySQL client[
/sql]
[b][u]Что бы решить возникшую проблему, можно пойти по одному из следующих путей:[/u][/b]
[li]Обновить всех клиентов (их библиотеки) до версии 4.1.1 или старше. Этот вариант идеальный, но не всегда подходит, потому что не для всех приложений существуют соответствующие обновленные библиотеки.[/li]
[li]Создать для «старых» клиентов учетные записи, которые хранят хеш пароля в старом формате.[/li]
[li]Для каждой учетной записи задать хеш пароля в старом формате. Это делается с помощью одной из двух конструкции:
[sql]
- SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');[
/sql]
[sql]
- UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-
WHERE Host = 'some_host' AND User = 'some_user';
- FLUSH PRIVILEGES;[
/sql][/li]
[li]Задать серверу в файле конфигурации (__my.ini__, __my.cnf__) директиву, которая указывает серверу использовать старый алгоритм хеширования пароля. Эта директива:
[code]-- old-passwords option[/code]
При этом не забудьте, что Вам нужно будет конвертировать хеши паролей из нового формата в старый формат. Это нужно будет сделить для всех учетных записей, у которых хеш пароля уже хранится в новом формате.
Для того, что бы выбрать пользователей, у которых хеши паролей хранятся в новом формате нужно написать запрос вида:
[sql]
- SELECT Host, User, Password
FROM mysql.user WHERE LENGTH(Password) > 16;[ /sql]
Далее, для каждого пользователя в полученной таблице вы конвертируете пароль любым из вариантов, предложенным пунктом выше.
[/li]
[nb][li]Если Вы программируете на языке PHP и версия языка младше версии 5.1, то знайте, что расширение MySQL использует старый протокол аутентификации, т.е. Вам придется работать со старым протоколом аутентификации, и лучше всего перевести сервер в режим старого протокола авторизации. В PHP версий старше 5.1. существует расширение mysqli, которое поддерживает новый протокол аутентификации.[/li]
[li]Не забудьте, что таблица [u]mysql.user[/u] хранит хеши паролей. Эти хеши получены с помощью алгоритмов необратимого шифрования. Из этого следует, что Вы никогда не узнаете, какой пароль был источником для данного хеша и Вам придется создавать новые пароли для учетных записей. После создания паролей сообщите новые данные учетных записей всем пользователям этих учетных записей.[/li]
[/nb]
[p]Рекомендуемые к прочтению разделы документации:[/p]
[li][url=http://dev.mysql.com/doc/refman/5.1/en/old-client.html]Section A.2.3, “Client does not support authentication protocol”[/url][/li]
[li][url=http://dev.mysql.com/doc/refman/5.1/en/password-hashing.html]5.7.9. Password Hashing in MySQL 4.1[/url][/li]
Обсудить в ФОРУМе - комментариев ()
Путь: Шпаргалки
Если вы заметили орфографическую, стилистическую или другую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
|
|