8
votes

MySQL Mot de passe Méthode de hachage Old VS Nouveau

J'essaie de vous connecter à un serveur MySQL chez DreamHost à partir d'un script PHP situé sur un serveur à SliceHost (deux sociétés d'hébergement différentes). J'ai besoin de le faire afin que je puisse transférer de nouvelles données à Slicehost vers Dreamhost. L'utilisation d'une députée n'est pas une option car les structures de table sont différentes et que je n'ai besoin que de transférer un petit sous-ensemble de données (100-200 enregistrements quotidiens) Le problème est que j'utilise la nouvelle méthode de hachage de mot de passe MySQL chez SLICEHOST, et DreamHost utilise l'ancien, donc je reçois xxx pré>

faits: p>

  • Je dois continuer à utiliser la nouvelle méthode de SliceHost et je ne peux pas utiliser une version PHP plus ancienne / bibliothèque li>
  • La base de données est trop grosse pour le transférer tous les jours avec un dépotoir li>
  • Même si je l'ai fait, les tables ont des structures différentes li>
  • Je dois copier uniquement un petit sous-ensemble, au quotidien (uniquement les changements de la journée, 100-200 enregistrements) li>
  • Étant donné que les tables sont si différentes, je dois utiliser php comme pont pour normaliser les données li>
  • déjà googled il li>
  • déjà parlé aux deux soutenant Stafs li> ul>

    L'option la plus évidente pour moi serait de commencer à utiliser la nouvelle méthode de hachage MySQL Mot de passe chez Dreamhost, mais elles ne le changeront pas et je ne suis pas la racine, je ne peux donc pas le faire moi-même. p>

    n'importe quelle idée sauvage? P>

    par Volkerk Subetion: P>

    SET SESSION old_passwords=0;
    SET GLOBAL old_passwords=0;
    SET PASSWORD FOR 'nodari'@'HOSTNAME' = PASSWORD('new password');
    grant all privileges on *.* to nodari@HOSTNAME identified by 'new password';
    


4 commentaires

SET SESSION OLD_PASSWORDS = 0 devrait suffire, il n'est pas nécessaire de modifier le paramètre global de cette solution one-shot (sinon, ils pourraient simplement redémarrer le mysqld sans cette option). Je l'ai testé sur mon serveur 5.1.37 local. Pour confirmer qu'un nouveau hash est vraiment "nouveau", laissez le gars de support exécuter la requête sélectionnez `host`, longueur (` mot de passe`) de mysql.user où `user` = 'nodari' . Remeber: 41 est bon, 16 ans est vieux = mauvais ;-)


Oh, et j'essayais d'abord sans la subvention. Cela ne devrait pas être nécessaire pour votre compte existant. Cela ne fait probablement pas de mal, non plus mais introduit une nouvelle question: "Est-ce que" identifié par "obéir exactement les mêmes règles que le mot de passe ()?" Très probablement, mais vous ne savez jamais ;-)


Ce n'est pas une chose une fois, j'aurai besoin de le faire quotidiennement pendant un temps ... et j'apparais que dans le prochain redémarrage de cette vieille old_password chose sera de retour pour me mordre dans le cul


J'étais avec le même problème. Cette question / réponse résout: http://stackoverflow.com / QUESTIONS / 1575807 / NE PAS-CONNECT-CONNECT-CONNECT-TO -MYSQL-4-1-UTILISANT-AUTHENTICATION


6 Réponses :


2
votes

Ouais, ça ressemble à une robinette. Sans coopération de vos hôtes ni la possibilité de modifier les formats de mot de passe ou les bibliothèques clientes, vous n'avez pas beaucoup d'options.

Honnêtement, mon premier choix serait de tomber Dreamhost. C'est probablement beaucoup de travail, mais s'ils vont être bloqués en utilisant de vieillestiques incompatibles, il continuera d'être problématique.

Si ce n'est pas une option, qu'en est-il du processus automatisé conjoint? Vous pouvez exporter les données sur le côté SLICEHOST dans un fichier CSV et le masser dans le format nécessaire à DreamHost, puis téléchargez-le sur le serveur DreamHost. Vous pouvez avoir un script cron sur le serveur DreamHost Vérifier périodiquement pour le fichier téléchargé et le traiter (en veillant à la déplacer ou à le supprimer après avoir été traité avec succès).


1 commentaires

Eh bien, maintenant j'écris un script pour générer une requête à Slicehost à exécuter à Dreamhost. J'utilise Curl comme méthode de transfert. Est un horrible piratage, mais au moins, je peux appeler le script de mise à jour via un navigateur ou un cron ...



2
votes

Je résoudrais cela en dégageant les données sur SLICEHOST, en utilisant SELECT ... dans OUTFILE .

Ceci vous permet de concevoir votre requête pour vous assurer que la sortie est dans le format correspondant à la structure de la table sur le site de destination.

Transférez ensuite le fichier de vidage sur DreamHost et utilisez-le Load Data Infile .

En tant que de côté, Dreamhost est vraiment toujours à l'aide de MySQL 4.0? Ils sont extrêmement obsolètes - même le support étendu de MySQL 4.1 est expirant ce mois-ci (Décembre 2009).


4 commentaires

La chose amusante est qu'ils utilisent la version 5.0. Je ne comprends pas pourquoi ils utilisent toujours la vieille méthode de hachage


D'accord, alors c'est probablement parce que la modification de la méthode de mot de passe perturberait probablement des centaines (ou des milliers) des applications des clients exécutées sur cet hôte. Souvent, un hôte Web laisse simplement un tel serveur tel quel et active les nouvelles fonctionnalités uniquement sur un serveur séparé. Au fil du temps, leurs clients migrent progressivement vers le serveur plus récent, et finalement, ils prennent l'ancien hors service. Vous pouvez demander à votre fournisseur de déplacer votre compte hébergé à l'un de ces nouveaux serveurs.


C'est un serveur privé ... ce ne serait-il pas une instance MySQL sans plus d'utilisateurs que moi?


Je ne sais pas, vous devriez demander au fournisseur d'hébergement. Il pourrait s'agir d'un serveur privé pour votre application, mais l'instance MySQL est sur un autre serveur partagé. Je ne sais pas.



1
votes

Je pense que vous devriez faire desservices / RPC à partir de SliceHost et écrire le service correspondant sur le pour le gérer.


0 commentaires

7
votes

Sur certaines conditions, vous pourrez peut-être toujours définir et utiliser un "nouveau mot de passe d'algorithme de hachage".
Les serveurs MySQL 4.1++ sont capables de gérer les deux algorithmes de connexion. Lequel est utilisé est indépendant de la variable de mots de passe ancienne. Si MySQL trouve un hachage long de 41 caractères commençant par * il utilise le nouveau système. Et la fonction Mot de passe () est également capable d'utiliser les deux algorithmes. Si le champ mysql.user.password est suffisamment large pour stocker 41 caractères et que la variable de mots de passe ancienne est égale à 0, il créera un mot de passe "nouveau". Documention pour Old_Passwords dit Portée variable à la fois pour que vous puissiez la modifier pour votre session.
Connectez-vous au serveur MySQL (avec un client capable de le faire malgré l'Old_Passwords global = 1), par ex. Heidisql et essayer ce qui suit: xxx

si elle imprime < Code> 1, 0, 41 (SIGNIFICATION DE L'OLD_PASSWORDS global est activé, mais pour la session, il est désactivé et mot de passe () renvoyé un "nouveau" mot de passe), vous devriez être capable de Définissez un nouveau mot de passe en utilisant le nouvel algorithme de votre compte dans la même session.

Mais si Dreamhost veut vraiment désactiver le nouvel algorithme de mots de passe, le champ MySQL.User.Password sera inférieur à 41 caractères et il n'y a rien vous peut faire à ce sujet (sauf harceler eux).


2 commentaires

'MySQL> SET SESSION OLD_PASSWORDS = 0; Requête OK, 0 rangées touchées (0.01 sec) mysql> select @@ global.old_passwords, @@ session.old_passwords, longueur (mot de passe ("ABC ')); + --------------------------- + -------------------------- - + ---------- ----------------- + | @@ global.old_passwords | @@ session.old_passwords | Longueur (mot de passe ('abc')) | + --------------------------- + -------------------------- - + ---------- ----------------- + | 1 | 0 | 41 | + --------------------------- + -------------------------- - + --------- ------------------ + 1 rangée dans ensemble (0,00 sec)


J'ai mis à jour la question, le champ de commentaire ne m'a pas laissé écrire de code



4
votes

Je viens d'avoir ce problème et j'ai été capable de travailler autour de lui.

Premier, connectez-vous à la base de données MySQL avec un client plus âgé qui ne dérange pas Old_Passwords. Connectez-vous à l'aide de l'utilisateur que votre script utilisera. P>

exécutez ces requêtes: p> xxx pré>

dans votre script php, modifiez votre fonction MySQL_Connect pour inclure le client Drapeau 1: P>

define('CLIENT_LONG_PASSWORD', 1);
mysql_connect('[your server]', '[your username]', '[your password]', false, CLIENT_LONG_PASSWORD);


2 commentaires

Ouais, je sais que vous pouvez le faire de cette façon, mais l'idée d'avoir un client actuel à SliceHost. En outre, je ne peux rien changer chez Dreamhost. Et ils utilisent l'ancienne méthode de mot de passe car tous les mots de passe de tous les serveurs sont stockés ailleurs, ils utilisent l'ancienne méthode et ils peuvent changer ceci maintenant ... Ce cas particulier n'a pas de bonne solution. J'ai fini par créer des scripts aux deux extrémités qui se communiquent à l'aide de curl ...


Je ne sais pas sur Slicehost. J'utilise aussi Dreamhost aussi bien qu'il s'avère. Old_Passwords est assez gênant.



0
votes

J'ai eu le même problème. Pour résoudre ce problème, j'ai fait ce qui suit:

SET PASSWORD = PASSWORD('[your password]');


1 commentaires

Où sélectionnez-vous l'utilisateur?