2010-07-19 12 views
0

J'ai un script Perl qui récupère les données d'une base de données MySQL sur un serveur (appelons-le serveur1), le stocke et l'écrit dans une autre base de données sur un autre serveur (serveur2). Les deux serveurs sont distants du serveur qui exécute le script Perl.Problème d'utilisation de Perl pour se connecter à la base de données MySQL sur le serveur distant

Je peux me connecter à la base de données sur le serveur1 OK, mais lorsque j'essaie de me connecter à la base de données sur le serveur2, en utilisant la même méthode DBI, j'obtiens une erreur. Ici, comme la ligne de commande Perl, est le bit qui est à l'origine de l'erreur:

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

Et voici le message d'erreur:

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.

Je n'ai pas accès root je peux » t mise à niveau MySQL et je ne peux pas changer le mot de passe pour utiliser l'ancien algorithme de hachage de mot de passe, qui est la solution suggérée dans beaucoup d'endroits.

Des idées pour quelqu'un?

+0

En dehors de l'écriture de votre propre client mysql de socket de bas niveau (que je ne recommanderais pas) les 2 options qui vous sont données sont les seules AFAIK. – Wrikken

+0

Ouais, c'est ce que je craignais. Juste en espérant que quelqu'un là-bas sait différent. –

Répondre

0

La base de données peut être configurée pour accepter les connexions uniquement à partir d'un certain ensemble d'adresses, par mesure de sécurité. Donc, si vous essayez d'accéder à une base de données prod à partir d'un ordinateur portable à la maison (par exemple), il peut vous rejeter, même si vous avez les informations d'identification appropriées. Essayez d'y accéder à partir d'un endroit où il est connu de travailler en utilisant une autre technologie - par exemple, si vous avez déjà un site web qui y accède, allez partout où apache/tomcat est en cours d'exécution, et essayez le perl. Si cela fonctionne, c'est le problème. Vous pouvez également vérifier de manière proactive les paramètres de la base de données.

+0

Merci. La connexion fonctionne correctement depuis un autre serveur, donc il y a quelque chose à propos de ce serveur (je l'appellerai myScriptHostServer). Mais je dois exécuter le script Perl à partir de là pour diverses raisons. Il y a un utilisateur myuser @ myScriptHostServer configuré avec tous les privilèges pour la base de données, c'est donc définitivement un problème d'authentification et non un problème de privilèges. –

+0

hmm, savez-vous exactement quelle est la différence d'authentification sur le côté mysql, même si vous ne pouvez pas le changer? Je dois imaginer qu'il existe un module dbi spécifique pour gérer les cas d'authentification spéciaux, comme ssl ou quelque chose de plus funky ... – eruciform

0

OK, en l'absence d'une alternative, je suis quelqu'un avec un accès root à server2 faire le correctif qui est publié ailleurs:

Connectez-vous à MySQL en tant qu'utilisateur root MySQL, puis:

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

Remplacer «nom d'utilisateur», «nom d'hôte» et «mot de passe» par les valeurs appropriées. Donc, ce que je veux dire ici, c'est que si vous n'avez pas d'accès root pour mettre à jour MySQL ou changer le mot de passe pour utiliser l'ancien algorithme de hachage de mot de passe, alors la seule solution est de trouver quelqu'un qui qui peut faire le changement pour vous.