This version of the page http://php.com.ua/ru/tips/mysql_old_protocol.htm (0.0.0.0) stored by archive.org.ua. It represents a snapshot of the page as of 2008-06-14. The original page over time could change.
PHP.com.ua : учимся вместе! - шпаргалки. - MySQL :: Ошибка при подключении к серверу: Client does not support authentication protocol



 
   - Насколько распространен шаблонизатор Sma...
  - Что сделать что бы не было проблем с код...
  - Senior Front-End Web Developer, Kiev...
  - jQuery, Opera, динамическое пересоздание...
  - контекстна реклама
  - Установка PHP на FreeBSD
  - Разница в работе регулярок локалки и хос...


Главная
Новости
Статьи
Шпаргалки
Файлы
О проекте
Форум
Футболки


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]

  1.  Client does not support authentication protocol requested by server;
  2.  consider upgrading MySQL client[
/sql]
[b][u]Что бы решить возникшую проблему, можно пойти по одному из следующих путей:[/u][/b]
[li]Обновить всех клиентов (их библиотеки) до версии 4.1.1 или старше. Этот вариант идеальный, но не всегда подходит, потому что не для всех приложений существуют соответствующие обновленные библиотеки.[/li]
[li]Создать для «старых» клиентов учетные записи, которые хранят хеш пароля в старом формате.[/li]
[li]Для каждой учетной записи задать хеш пароля в старом формате. Это делается с помощью одной из двух конструкции:
[sql]

  1.  SET PASSWORD FOR 'some_user'@'some_host' = OLD_PASSWORD('newpwd');[
/sql]
[sql]

  1.  UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
  2.  
    WHERE Host = 'some_host' AND User = 'some_user';
  3.  FLUSH PRIVILEGES;[
/sql][/li]
[li]Задать серверу в файле конфигурации (__my.ini__, __my.cnf__) директиву, которая указывает серверу использовать старый алгоритм хеширования пароля. Эта директива:
[code]-- old-passwords option[/code]
При этом не забудьте, что Вам нужно будет конвертировать хеши паролей из нового формата в старый формат. Это нужно будет сделить для всех учетных записей, у которых хеш пароля уже хранится в новом формате.
Для того, что бы выбрать пользователей, у которых хеши паролей хранятся в новом формате нужно написать запрос вида:
[sql]

  1.  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.
Контакты Design by webFaction Ukrainian PHP Group 2004-2005