consider upgrading mysql client

Вернуться
Client does not support authentication . (Hg) 03/11/2004 — 20:00:38
Re: Client does not support authentication . (Mike) 03/11/2004 — 20:02:01
Re: надо положить в нужное место новую. (Misha v.3) 05/11/2004 — 14:46:35
Re: надо положить в нужное место новую. (GoodVin) 28/11/2004 — 13:14:17
Re: надо положить в нужное место новую. (FreeL@n) 02/11/2010 — 14:33:26

> Original message text:
> From: Hg — 03/11/2004 — 20:00:38
> Subject:Client does not support authentication .
> ——————
> С переходом на MySQL 4.1 стала возникать ошибка:
> mySQL error: Client does not support authentication protocol requested by server; consider upgrading MySQL client
> mySQL error code:
> Date: Wednesday 03rd of November 2004 07:58:59 PM
> Что делать?
>

From: Mike — 03/11/2004 — 20:02:01
Subject:Client does not support authentication .
——————
A.2.3 Client does not support authentication protocol
MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. If you upgrade the server to 4.1, attempts to connect to it with an older client may fail with the following message:

shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client

To solve this problem, you should use one of the following approaches:

Upgrade all client programs to use a 4.1.1 or newer client library.
When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.
Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function: mysql> SET PASSWORD FOR
-> ‘some_user’@’some_host’ = OLD_PASSWORD(‘newpwd’);

Alternatively, use UPDATE and FLUSH PRIVILEGES: mysql> UPDATE mysql.user SET Password = OLD_PASSWORD(‘newpwd’)
-> WHERE Host = ‘some_host’ AND User = ‘some_user’;
mysql> FLUSH PRIVILEGES;

Substitute the password you want to use for «newpwd» in the preceding examples. MySQL cannot tell you what the original password was, so you’ll need to pick a new one.
Tell the server to use the older password hashing algorithm:
Start mysqld with the —old-passwords option.
Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query: mysql> SELECT Host, User, Password FROM mysql.user
-> WHERE LENGTH(Password) > 16;

For each account record displayed by the query, use the Host and User values and assign a password using the OLD_PASSWORD() function and either SET PASSWORD or UPDATE, as described earlier.
For additional background on password hashing and authentication, see section 5.5.9 Password Hashing in MySQL 4.1.

Главная » Заметки » База данных MySQL » Client does not support authentication protocol requested by server

Начиная с версии 4.1, в My SQL используется новый протокол аутентификации. В новом протоколе алгоритм хеширования данных аутентификации отличается от алгоритма более ранних версий сервера My SQL. По сути вся проблема сводится к тому, что хеш пароля «mypass» в версиях старше 4.1 (т.е. 4.1.*, 5.0.* и т.д.) имеет вид *6C8989366EAF75BB670AD8EA7A7FC1176A95CEF4 (строка 41 байта), и тот же пароль «mypass» в версиях младше 4.1. (т.е. 4.0.*, 3.23.* и т.д.) имеет вид 6f8c114b58f2ce9e (строка 16 байт)

Теперь возникает ситуация. Вы обновляете сервер до версии старше 4.1., а клиент у Вас остается старый. Вы все правильно установили, сервер нормально запустился. Вы запускаете клиента, вводите логин и пароль соответствующей учетной записи, нажимаете Enter, Ваш старый клиент хеширует данные авторизации по старому алгоритму и передает их на сервер. Сервер принимает эти данные и сранивает их с данными из таблицы mysql.user. В результате такого сравнения сервер видит, что хеши паролей не совпадают (всего 16 байт, вместо ожидаемых, как минимум, 41-го байта). Вследствие чего, сервер выдает вполне информативное сообщение:

Чтобы решить возникшую проблему, можно пойти по одному из следующих путей:

  1. Обновить всех клиентов (их библиотеки) до версии 4.1.1 или старше. Этот вариант идеальный, но не всегда подходит, потому что не для всех приложений существуют соответствующие обновленные библиотеки.
  2. Создать для «старых» клиентов учетные записи, которые хранят хеш пароля в старом формате.
  3. Для каждой учетной записи задать хеш пароля в старом формате. Это делается с помощью одной из двух конструкции:

Задать серверу в файле конфигурации (my.ini, my.cnf) директиву, которая указывает серверу использовать старый алгоритм хеширования пароля. Эта директива:

При этом не забудьте, что Вам нужно будет конвертировать хеши паролей из нового формата в старый формат. Это нужно будет сделать для всех учетных записей, у которых хеш пароля уже хранится в новом формате.

Для того, что бы выбрать пользователей, у которых хеши паролей хранятся в новом формате нужно написать запрос вида:

Далее, для каждого пользователя в полученной таблице вы конвертируете пароль любым из вариантов, предложенным пунктом выше.

Если Вы программируете на языке PHP и версия языка младше версии 5.1, то знайте, что расширение My SQL использует старый протокол аутентификации, т.е. Вам придется работать со старым протоколом аутентификации, и лучше всего перевести сервер в режим старого протокола авторизации. В PHP версий старше 5.1. существует расширение mysqli, которое поддерживает новый протокол аутентификации.

Не забудьте, что таблица mysql.user хранит хеши паролей. Эти хеши получены с помощью алгоритмов необратимого шифрования. Из этого следует, что Вы никогда не узнаете, какой пароль был источником для данного хеша и Вам придется создавать новые пароли для учетных записей. После создания паролей сообщите новые данные учетных записей всем пользователям этих учетных записей.

Рекомендуемые к прочтению разделы документации:

Содержание

  1. Соединяемся старым клиентом MySql с сервером выше 4й версии
  2. Почитать
  3. Похожие статьи:
  4. 8 Комментариев

Соединяемся старым клиентом MySql с сервером выше 4й версии

При попытке соединения с сервером базы данных Mysql версии 4.1 и выше с помощью php старых версий, который использует расширение mysql для работы с MySql ниже версии 4.1 можно получить следующее сообщение об ошибке:

Client does not support authentication protocol requested by server; consider upgrading MySQL client

А дело в том, что Mysql 5.0 и 4.1 используют протокол аутентификации, основанный на алгоритме хеширования паролей, отличный от предыдущих версий.

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

Или используя UPDATE и FLUSH PRIVILEGES:

Еще можно стартовать mysql c опцией —old-passwords, но я этот способ не считаю целесообразным.

Что же касается php старых версий, которые еще встречаются на серверах клиентов и в которых расширение mysql не поддерживает алгоритм хеширования версий mysql выше 4.0, то можно воспользоваться расширением mysqli (MySQL Improved Extension).

Почитать

  • http://dev.mysql.com/doc/refman/5.0/en/old-client.html — официальное описание проблемы от mysql.

Автор: Yuriy Drozdov

Похожие статьи:

  • Нет похожих статей

Эта запись опубликована Thursday, November 13th, 2008 в 12:22 pm Рубрики: MySQL. Подпишитесь на RSS 2.0 ленту комментариев. Комментирование запрещено, но Вы можете поставить трекбек со своего сайта.

8 Комментариев

интересно зачем они поменяли алгоритм хеширования?

В целях безопасности, новый — более криптостойкий.

А не кажется ли вам дорогие Ira и Yuriy, что это баян и ошибке этой уже 3 года с начала выхода MySQL 5.
И, что значит php старых версий, я про такие не слышал. Может если уже пишете, так уточняйте информацию, каждая версия становиться старой, как только выходят новая.

Если учесть, что релиз mysql 4.1 вышел в 2003 году, то ошибке лет 5. Подписи к статье “Мегановость” я не ставил. Просто недавно столкнулся с этим, поэтому и написал. В моем случае версия php была 4.3.3

Спасибо, за уточнение.
Я считаю, что проблема не актуальна и тех кто пользуется php “старых” версий типа 4.3.3, уже нет или почти нет, так как я не вижу смысла не обновить php до последней стабильной версии 4.x.
Но если уже пишете про веб программирование, тогда хотелось бы видеть актуальные вещи, а не переписанные в сотый раз одни и те же темы.

Считаю тему вполне актуальной. В мире полно серверов с версией php 4.3.x. Если все работает и на сервере около сотни сайтов, зачем менять версию php?

Следует заметить что дело не в версии PHP, а именно в версии mysqlib, c которой собран PHP. Иногда PHP 4.3.5 бывает собран c MySQL 5.0

Источник: computermaker.info

Понравилась статья? Поделиться с друзьями:
Ок! Компьютер
Добавить комментарий