2013-05-10 5 views
14

Ich habe ein Problem beim Versuch, eine Verbindung zur MySQL-Datenbank mit Windows OBDC-Treiber herzustellen. Es gibt viele Suchtreffer bezüglich der offensichtlichen ... Leute benutzen alte Versionen, jedoch bin ich nicht.Verbindung mit alten (vor 4.1.1) Authentifizierungsprotokoll abgelehnt (Client-Option 'secure_auth' aktiviert)

mysqld ist auf CentOS 6.4 32-Bit-

./usr/libexec/mysqld Ver 5.1.69 for redhat-linux-gnu on i386 (Source distribution) 

enter image description here

Also ich ratlos bin zu verstehen, wo jeder vor 4.1.1 Protokoll herkommt. Irgendwelche Ideen?

Antwort

10

Ich denke, wenn Sie die richtige Frage stellen, ist es einfacher, die Antwort zu finden.

In diesem Fall bezieht sich "mein" Problem darauf, wie die Passwörter gehackt und in der Datenbank gespeichert werden. Legacy-Passwörter wurden mit einem kürzeren Hash-Wert gespeichert, der nun veraltet ist.

Einige wichtige Punkte:

mysql_upgrade nicht kann und Upgrade keine Passwörter, noch über sie in einigen Versionen warnt finden Sie unter: http://bugs.mysql.com/bug.php?id=65461.

Selbst wenn Sie meist den neuesten Server und die neuesten Clients haben, benötigen Sie lediglich einen Legacyclient, um ein Legacy-Passwort zu erstellen, und dann haben Sie Probleme mit diesem Account, egal, welcher Client versucht, es zu verwenden.

Verschiedene Versionen haben die Situation anders behandelt, so dass Sie auf einigen Legacy-Passwörtern in Ihrer Datenbank sitzen und dann plötzlich, ohne ersichtlichen Grund, einige Konten nicht mehr funktionieren ... dies ist wegen der verschiedenen Versionen, die mit dem umgehen Lage.

Sie können Kennwörter nicht aktualisieren. Sie müssen wissen, was sie sind und Sie müssen sie ändern.

EDIT: Um klarer zu sein, müssen Sie das Kennwort, das mit dem kürzeren Hash gespeichert wird, ändern, indem Sie einen neuen Client verwenden, der längere Hashes verwendet. Auf diese Weise werden Sie das Konto-Passwort mit dem längeren Hash-Wert schreiben. Zu diesem Zeitpunkt sollte nichts mehr auf Versuche hinweisen, auf das Konto zuzugreifen. Wenn das Problem wiederholt auftritt, sollten Sie nach älteren Clients auf Ihrer Site suchen, die noch Kennwörter mit der veralteten Hash-Länge schreiben.

+0

war ich nicht vertraut mit einem Passwort in MySQL zurückzuzusetzen und eine gute Probe unter folgenden URL zu finden: http: // www.cyberciti.biz/faq/mysql-change-user-password/ – Jeff

+0

Und wenn Sie nicht mit der Kommandozeile [phpMyAdmin] (http://www.phpmyadmin.net/home_page/index.php) vertraut sind Ich will nicht ohne leben. – tlum

+0

Dies in Kombination mit STW Antwort unten setze mich richtig. – Jason

3

Try alte Version Treiber installieren 3.51.30: http://dev.mysql.com/downloads/connector/odbc/5.1.html#downloads Es funktioniert auf meinem Mysql Ver 5.0.24a-Gemeinde

+1

Das behandelt die Frage nicht wirklich und das Problem ist mit veralteter Kennworthashlänge für einige Benutzerkonten, die von diesen älteren Clientversionen erstellt werden. Das Herunterstufen von Clients als Korrektur ist unaufrichtig. Solche Konten sollten aktualisiert werden, um ein sichereres Passwort-Hashing zu verwenden. – tlum

+0

Ich kann bestätigen, dass dies funktioniert. –

0

ich eine andere Lösung, falls jemand gefunden trifft dies - sehr seltsam -

  1. installieren der 5.1 64 bit ODBC-Treiber - verifizieren Sie eine ODBC-Verbindung selbst funktioniert, wenn Sie eine Verbindung herstellen können dann sollten Sie nach tun können # 2
  2. Klicken Sie auf Linked Servers - Providers - klicken Sie mit der rechten Maustaste auf MSDASQL, klicken Sie auf Eigenschaften
    • Deaktivieren Sie "Inprozess zulassen" - was eine gute Sache zu tun ist, wenn Sie TEXT und NTEXT Felder einfügen müssen.
  3. erstellen verknüpften Server-Verbindung oder testen Sie die, die Sie mit zu kämpfen haben - lol

Als ich „Allow inprocess“ geprüft hatte ich immer noch den Fehler, obwohl das ODBC System DSN hat gut funktioniert. Ich nehme an, weil ich eine Mischung aus 5.2 hatte (mit Servern, die gut funktionierte) und 5.1 für die Server, die das nicht taten, teilte SQL die Prozesse, weil der 5.1 Treiber diesen Fehler nicht gibt.

+0

Ich glaube, dass ich das bereits unten gesagt habe. "Verschiedene Versionen haben die Situation anders behandelt, also ..." Das ist keine Lösung, es wird nur das Problem unter den Teppich gekehrt. Die Hash-Größe ist veraltet. Neuere Clients unterstützen dies nicht. Die Lösung besteht darin, das Kennwort mit der veralteten Länge in einer unterstützten Länge neu zu schreiben. Alles andere ist nur ein Workaround, der wahrscheinlich wiederkommt und dich oder jemand anderen immer wieder beißt. ODER, Sie haben einen neuen Weg gefunden, um diesen Fehler zu erzeugen, der völlig unabhängig von dem bisher besprochenen Problem ist. – tlum

1

Ich hatte eine ähnliche Fehlermeldung, wenn ich remote versuchte, auf meine MySQL-Datenbank zuzugreifen. Mit Directadmin änderte ich leicht das MySql-Datenbankpasswort, wie oben vorgeschlagen. Dies erzeugte automatisch das Passwort unter Verwendung der neueren Hash-Methode. Dies löste das Problem der Fernverbindung sofort.

9

MySQL Workbench 6.08 in den Serververbindungen verwalten, Registerkarte Verbindung, Erweitert Unterregisterkarte müssen Sie das Kontrollkästchen 'Verwenden Sie das alte Authentifizierungsprotokoll.'

+1

es ist großartig für MySQL Workbench - total bummer für den ODBC Connector – STW

+1

Die Frage bezieht sich nicht auf MySQL Workbench überhaupt. – PhilS

3

Ich lief dies während der Verwendung des ODBC Connector für Windows, um eine Verbindung zu einem Percona 5.5-Server herzustellen. welches secure_auth deaktiviert hat.

Von dem, was ich den ODBC-Connector gefunden, im Gegensatz zu MySQL Workbench, eine Option nicht unterstützte Anmeldungen zu authentifizieren, die die alten 16-Byte-Hash-Passwörter verwenden. Es gibt einen Fehlerbericht in Bezug auf diesen Fehler, aber es scheint, dass der Zessionar bezüglich der Feature-Anfrage verwirrt ist (siehe bug #71234).

konnte ich die mysql Login aktualisieren, um den neuen 41-Byte-Hash unter Verwendung dieser Befehle zu verwenden:

set old_passwords=0; 
set password=password('yourpasswordhere'); 

Wie ich unseren Server erwähnt hat secure_auth deaktiviert, die password() zu verursachen scheint old_password() Ergebnisse zurückzukehren. Wenn Sie set old_passwords=0; ausführen, wird die Methode password() aktiviert, um die neuen 41-Byte-Hashwerte (für die Dauer Ihrer Sitzung) zu generieren.

+0

Danke, das war es, was ich brauchte, um unsere Passwörter angemessen zurückzusetzen – Jason

Verwandte Themen