Появилась проблема - пытался с локального компьютера подключиться к удаленной БД, расположенной на сервере Хостинга 1gb.ru. На локальном компьютере установлена версия php 5.3.9, а фреймворком был CodeIgniter 3.0 dev.
При попытке подключения к удаленной базе получал ошибку:
Но у меня не свой сервер, а обычный shared-хостинг, на котором у меня нет доступа к конфигам. Значит идем другим путем.
Оригинальный пароль к удаленной базе мы знаем. Например, это будет 'aaa111'.
Старый хэш для пароля - 7dd9aa246c9696f8
Новый хэш для этого пароля - *9C40CFE7232A3772C4402D0DF0C076F2C9F562F1
Авторизуетесь через PhpMyAdmin на сервер БД под нужными вам логином и паролем (ааа111). На всякий случай убеждаетесь, что сервер БД использует старое хэширование при помощи запроса:
Если результат длиной 16 символов, то случай как раз наш. Продолжаем.
Пытаться выполнить запрос:
SET PASSWORD = PASSWORD('aaa111')
бесполезно, потому, что создастся хэш старым способом.
Поэтому на локальном компе, где свежая версия mysql и php выполняете запрос
Результат: *9C40CFE7232A3772C4402D0DF0C076F2C9F562F1
Возвращаетесь в PhpMyAdmin на сервер и там выполняете SQL-запрос:
То есть мы заменили старый хэш пароля на новый хэш. После этих манипуляций подключение к базе происходит очень даже отлично и с помощью PDO и с помощью $this->load->database(..); в CodeIgniter.
При попытке подключения к удаленной базе получал ошибку:
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 пароля , например при использовании обычного хостинга , такие манипуляции не прокатят
Спасибо большое! Очень помогло.
Спасибо!
Все ясно и доступно, а главное правильно!))
А если ошибака такая же, но LENGTH(PASSWORD('pass111')) значение 41
First, если длина хэша 41, то это не старая система хранения хэшей, а новая. Вот почему ошибка та же самая, к сожалению, не могу подсказать пока что. Попробуй спросить хостера на всякий случай.
Как раз через phpmyadmin не могу подключиться к серверу mysql, дает эту ошибку, что делать не понятно.
Очень помогло!
Спасибо. Помогло.
Отправить комментарий