Mysql Passwort Hashing-Methode alt vs neu

8

Ich versuche, eine Verbindung zu einem MySQL-Server bei Dreamhost von einem PHP-Scrip in einem Server bei Slicehost (zwei verschiedene Hosting-Unternehmen) zu verbinden. Ich muss das tun, damit ich neue Daten bei slicehost zu dreamhost übertragen kann. Die Verwendung eines Dumps ist keine Option, da die Tabellenstrukturen unterschiedlich sind und ich nur eine kleine Teilmenge von Daten übertragen muss (100-200 tägliche Datensätze) Das Problem ist, dass ich die neue MySQL Password Hashing-Methode bei Slicehost benutze und Dreamhost die alte verwendet, also bekomme ich

%Vor%

Fakten:

  • Ich muss weiterhin die neue Methode bei slicehost verwenden und kann keine ältere PHP-Version / Bibliothek
  • verwenden
  • Die Datenbank ist zu groß, um sie jeden Tag mit einem Dump
  • zu übertragen
  • Selbst wenn ich das getan habe, haben die Tabellen unterschiedliche Strukturen
  • Ich muss nur eine kleine Teilmenge davon täglich kopieren (nur die Änderungen des Tages, 100-200 Datensätze)
  • Da die Tabellen so unterschiedlich sind, muss ich PHP als Brücke verwenden, um die Daten zu normalisieren
  • Schon gegooglet es
  • Habe schon mit beiden Support-Mitarbeitern gesprochen

Die offensichtlichste Option für mich wäre, die neue MySQL Password Hashing-Methode bei dreamhost zu verwenden, aber sie wird sie nicht ändern und ich bin nicht root, also kann ich das nicht selbst tun.

Irgendwelche wilde Idee?

Durch Volkerk Suggestion:

%Vor%

Das Offensichtliche wäre jetzt a     mysql & gt; SET GLOBAL old_passwords = 0; Aber ich brauche SUPER Privileg, das zu tun, und sie werden es mir nicht geben

wenn ich die Abfrage ausführen

%Vor%

Ich bekomme den Fehler

%Vor%

Ich bin nicht root ...

Der Typ bei Dreamhost Support besteht darauf, dass das Problem an meinem Ende ist. Aber er sagte, dass er jede Frage ausführen wird, die ich ihm sage, da es ein privater Server ist. Also, ich muss dem Typen GENAU sagen, was er laufen soll. Also sag ihm, er soll rennen

%Vor%

wäre ein guter Anfang?

    
The Disintegrator 12.12.2009, 06:59
quelle

6 Antworten

2

Ja, das sieht nach einem Toughie aus. Ohne die Zusammenarbeit Ihrer Hosts oder die Möglichkeit, Passwort-Formate oder Client-Bibliotheken zu ändern, haben Sie nicht viele Optionen.

Ehrlich gesagt, meine erste Wahl wäre, Dreamhost zu enttäuschen. Das ist wahrscheinlich eine Menge Arbeit, aber wenn sie mit alten inkompatiblen Dingen stecken bleiben, wird es weiterhin problematisch sein.

Wenn das keine Option ist, was ist dann mit einem gemeinsamen automatisierten Prozess? Sie können die Daten auf der Slidehost-Seite in eine CSV-Datei exportieren und sie in das für Dreamhost erforderliche Format massieren und dann auf den Dreamhost-Server hochladen. Sie könnten ein Cron-Skript auf dem Dreamhost-Server haben, das in regelmäßigen Abständen nach der hochgeladenen Datei sucht und diese verarbeitet (sicher stellen, dass sie nach der erfolgreichen Verarbeitung verschoben oder gelöscht wird).

    
zombat 12.12.2009, 07:17
quelle
7

Unter einigen Bedingungen können Sie möglicherweise weiterhin ein "neues Hashalgorithmus-Kennwort" festlegen und verwenden.
MySQL 4.1+ Server können beide Login-Algorithmen verarbeiten. Welche verwendet wird, ist unabhängig von der alten Passwörter-Variable. Wenn MySQL einen 41 Zeichen langen Hash findet, der mit * beginnt, wird das neue System verwendet. Und die PASSWORD () -Funktion ist auch in der Lage, beide Algorithmen zu verwenden. Wenn das Feld mysql.user.Password groß genug ist, um 41 Zeichen zu speichern, und die Variable alt-passwords 0 ist, wird ein "neues" Passwort erstellt. Die Dokumentation für old_passwords sagt Variable Scope Both , also könnte es sein kann es für Ihre Sitzung ändern.
Stellen Sie eine Verbindung zum MySQL-Server her (mit einem Client, der dies trotz der globalen alten_Passwörter = 1 tun kann), z. HeidiSQL und versuchen Sie Folgendes:

%Vor%

Wenn% ce_de% gedruckt wird (dh die globalen alten_passwörter sind aktiviert, aber für die Sitzung ist es deaktiviert und PASSWORD () hat ein "neues" Passwort zurückgegeben), sollten Sie Setzen Sie ein neues Passwort mit dem neuen Algorithmus für Ihr Konto innerhalb derselben Sitzung.

Aber wenn Dreamhost wirklich den Algorithmus für neue Kennwörter deaktivieren möchte, wird das Feld mysql.user.Password weniger als 41 Zeichen lang sein und es gibt nichts, was Sie dagegen tun können (außer dass Sie sie nagen) / p>     

VolkerK 12.12.2009 10:39
quelle
3

Ich hatte gerade dieses Problem und konnte es umgehen.

Verbinden Sie sich zuerst mit einem älteren Client, der alth_passwords nichts ausmacht, mit der MySQL-Datenbank. Verbinden Sie sich mit dem Benutzer, den Ihr Skript verwendet.

Führen Sie diese Abfragen aus:

%Vor%

Ändern Sie in Ihrem PHP-Skript Ihre mysql_connect-Funktion so, dass sie das Client-Flag 1 enthält:

%Vor%

Damit konnte ich mich erfolgreich verbinden.

    
TehShrike 25.05.2010 03:07
quelle
2

Ich würde das lösen, indem ich die Daten bei Slicehost mit SELECT ... INTO OUTFILE ablege.

Dadurch können Sie Ihre Abfrage so entwerfen, dass die Ausgabe in dem Format erfolgt, das mit der Tabellenstruktur am Zielstandort übereinstimmt.

Übertragen Sie die Dump-Datei anschließend an Dreamhost und verwenden Sie LOAD DATA INFILE .

Abgesehen davon ist Dreamhost wirklich immer noch mit MySQL 4.0? Sie sind extrem veraltet - selbst die erweiterte Unterstützung von MySQL 4.1 ist abgelaufen in diesem Monat (Dezember 2009).

    
Bill Karwin 12.12.2009 07:58
quelle
1

Ich denke, Sie sollten WebServices / RPC von slicehost machen und schreiben Sie den entsprechenden Dienst auf dem, um damit umzugehen.

    
Dennis C 12.12.2009 08:03
quelle
0

Ich hatte das gleiche Problem. Um es zu lösen, habe ich Folgendes getan:

%Vor%     
f.eberharter 04.02.2016 19:56
quelle