[FIXED] mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication, CodeIgniter, 1gb.ru, php 5.3

четверг, 24 мая 2012 г.

Появилась проблема - пытался с локального компьютера подключиться к удаленной БД, расположенной на сервере Хостинга 1gb.ru. На локальном компьютере установлена версия php 5.3.9, а фреймворком был CodeIgniter 3.0 dev.

При попытке подключения к удаленной базе получал ошибку:
mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication...
Это значит, что на серверах 1gb.ru все еще используется хранение паролей в виде 16-тисимвольных хэшей. Если бы я работал с собственным сервером, то нашел бы my.cnf и удалил бы там строку old_password = 1 и заменил бы хэши паролей в таблице mysql.user на новые, 41-символьные.

Но у меня не свой сервер, а обычный shared-хостинг, на котором у меня нет доступа к конфигам. Значит идем другим путем.

Оригинальный пароль к удаленной базе мы знаем. Например, это будет 'aaa111'.
Старый хэш для пароля - 7dd9aa246c9696f8
Новый хэш для этого пароля - *9C40CFE7232A3772C4402D0DF0C076F2C9F562F1

Авторизуетесь через PhpMyAdmin на сервер БД под нужными вам логином и паролем (ааа111). На всякий случай убеждаетесь, что сервер БД использует старое хэширование при помощи запроса:

SELECT LENGTH(PASSWORD('aaa111'));

Если результат длиной 16 символов, то случай как раз наш. Продолжаем.

Пытаться выполнить запрос:
SET PASSWORD = PASSWORD('aaa111')
бесполезно, потому, что создастся хэш старым способом.

Поэтому на локальном компе, где свежая версия mysql и php выполняете запрос
SELECT PASSWORD('aaa111');

Результат: *9C40CFE7232A3772C4402D0DF0C076F2C9F562F1

Возвращаетесь в PhpMyAdmin на сервер и там выполняете SQL-запрос:

SET PASSWORD = '*9C40CFE7232A3772C4402D0DF0C076F2C9F562F1';

То есть мы заменили старый хэш пароля на новый хэш. После этих манипуляций подключение к базе происходит очень даже отлично и с помощью PDO и с помощью $this->load->database(..); в CodeIgniter.

8 коммент.:

Анонимный комментирует...

Если нет root пароля , например при использовании обычного хостинга , такие манипуляции не прокатят

Lillies комментирует...

Спасибо большое! Очень помогло.

Анонимный комментирует...

Спасибо!
Все ясно и доступно, а главное правильно!))

First комментирует...

А если ошибака такая же, но LENGTH(PASSWORD('pass111')) значение 41

GIN комментирует...

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

Анонимный комментирует...

Как раз через phpmyadmin не могу подключиться к серверу mysql, дает эту ошибку, что делать не понятно.

Анонимный комментирует...

Очень помогло!

Анонимный комментирует...

Спасибо. Помогло.

Copyright © 2010 WEB IT blog