Проблема с использованием Perl для подключения к базе данных MySQL на удаленном сервере

0

У меня есть Perl script, который получает данные из базы данных MySQL на одном сервере (пусть вызывается server1), делает что-то с ним и записывает его в другую базу данных на другом сервере (server2). Оба сервера удалены с сервера, на котором запущен Perl script.

Я могу подключиться к БД на сервере1 OK, но когда я пытаюсь подключиться к БД на сервере2, используя тот же метод DBI, я получаю сообщение об ошибке. Здесь, в качестве командной строки Perl, это бит, вызывающий ошибку:

perl -MDBI -e 'DBI->connect("DBI:mysql:myDB:server2.whatever.co.uk","myuser","mypassword") or die DBI->errstr;'

И вот сообщение об ошибке:

DBI connect('myDB:server2.whatever.co.uk','myuser',...) failed: Client does not support authentication protocol requested by server; consider upgrading MySQL client at -e line 1 Client does not support authentication protocol requested by server; consider upgrading MySQL client at -e line 1.

У меня нет доступа root, поэтому я не могу обновить MySQL, и я не могу изменить пароль, чтобы использовать старый алгоритм хэширования паролей, который является решением, предлагаемым во многих местах.

Идеи кто-нибудь?

  • 0
    Помимо написания вашего собственного низкоуровневого сокетного клиента mysql (который я бы не рекомендовал), вам предоставлены только 2 варианта AFAIK.
  • 0
    Да, это то, чего я боялся. Просто надеюсь, что кто-то там знает другое.
Теги:
dbi

2 ответа

0
Лучший ответ

База данных может быть настроена для приема соединений только с определенного набора адресов в качестве меры безопасности. Поэтому, если вы пытаетесь получить доступ к базе данных prod с домашнего ноутбука (например), он может отклонить вас, даже если у вас есть соответствующие учетные данные. Попытайтесь получить доступ к нему из того места, где он, как известно, работает с использованием другой технологии - например, если у вас есть веб-сайт, который обращается к нему уже, идите туда, где работает apache/tomcat, и попробуйте перл там. Если это сработает, то проблема. Вы также можете проактивно проверить настройки базы данных.

  • 0
    Благодарю. Соединение отлично работает с другого сервера, поэтому что-то есть в этом сервере (я назову его myScriptHostServer). Но я должен запустить скрипт Perl оттуда по разным причинам. Пользователь myuser @ myScriptHostServer настроен со всеми привилегиями для базы данных, поэтому это определенно проблема аутентификации, а не привилегий.
  • 0
    хм, вы точно знаете, в чем разница в аутентификации на стороне mysql, даже если вы не можете ее изменить? Я должен представить, что есть специальный модуль dbi для обработки особых случаев аутентификации, таких как ssl или что-то более прикольное ...
0

ОК, в отсутствие альтернативы я получил кого-то с правами root для сервера2, чтобы выполнить исправление, опубликованное в другом месте:

Подключитесь к MySQL как пользователь root root, затем:

mysql> use mysql;
mysql> SET PASSWORD FOR 'username'@'hostname' = OLD_PASSWORD('password');
mysql> FLUSH PRIVILEGES;

Заменить "имя пользователя", "имя хоста" и "пароль" соответствующими значениями.

Итак, что я говорю здесь, похоже, что если у вас нет корневого доступа к обновлению MySQL или для изменения пароля для использования старого алгоритма хэширования пароля, то единственным решением является поиск того, кто делает кто может внести изменения для вас.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню