У меня есть 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, и я не могу изменить пароль, чтобы использовать старый алгоритм хэширования паролей, который является решением, предлагаемым во многих местах.
Идеи кто-нибудь?
База данных может быть настроена для приема соединений только с определенного набора адресов в качестве меры безопасности. Поэтому, если вы пытаетесь получить доступ к базе данных prod с домашнего ноутбука (например), он может отклонить вас, даже если у вас есть соответствующие учетные данные. Попытайтесь получить доступ к нему из того места, где он, как известно, работает с использованием другой технологии - например, если у вас есть веб-сайт, который обращается к нему уже, идите туда, где работает apache/tomcat, и попробуйте перл там. Если это сработает, то проблема. Вы также можете проактивно проверить настройки базы данных.
ОК, в отсутствие альтернативы я получил кого-то с правами root для сервера2, чтобы выполнить исправление, опубликованное в другом месте:
Подключитесь к MySQL как пользователь root root, затем:
mysql> use mysql;
mysql> SET PASSWORD FOR 'username'@'hostname' = OLD_PASSWORD('password');
mysql> FLUSH PRIVILEGES;
Заменить "имя пользователя", "имя хоста" и "пароль" соответствующими значениями.
Итак, что я говорю здесь, похоже, что если у вас нет корневого доступа к обновлению MySQL или для изменения пароля для использования старого алгоритма хэширования пароля, то единственным решением является поиск того, кто делает кто может внести изменения для вас.