Frage

Für eine interne Tomcat / Java / Struts-Anwendung, wir konvertieren speziell geschriebenen Authentifizierungscode JDBCRealm zu verwenden. Die Datenbank ist MySQL 5.0, und die Kennwörter werden als PASSWORD() schlüsselten Strings gespeichert. In unserer Version von MySQL, die PASSWORD() Funktion ist ein nicht-Standard (proprietär?) 41-Byte-Hash. (Ich weiß jetzt, dass wir nicht für unsere Passwörter es sein sollte, sondern stattdessen SHA1() oder MD5() werden. Aber hier sind wir.)

Gibt es eine Möglichkeit JDBMRealm zu verwenden, ohne alle unsere Nutzer zu zwingen, ihre Passwörter neu eingeben, damit wir sie wieder kodieren können? Gibt es eine JDBCRealm verdauen, die uns gegen eine PASSWORD()-codiertes Passwort Spalt authentifizieren können?

War es hilfreich?

Lösung

Neue MySQL-Versionen bieten genannt OLD_PASSWORD(), das Passwort in einer Art und Weise verdaut rückwärtskompatibel mit 4.0 und vorherigen Versionen.

Was Sie tun können, ist daher zu configure JDBCRealm in der Weise, dass es:

  1. Nutzt keine Art von Digest von selbst aus. Dies ist natürlich nicht ideal, auch in sicherer Umgebung und ist geradezu gefährlich, wenn der Datenbankserver über nicht vertrauenswürdige Verbindung lebt. Sie tun dies, indem sie nicht digest Attribut angeben.
  2. Verwendet die oben OLD_PASSWORD() Funktion das Passwort zu verschlüsseln, bevor sie mit dem aus der Datenbank verglichen werden. Sie müssen JDBCRealm verlängern, wird diese Funktionalität nicht aus der Box zur Verfügung gestellt. Für Tomcat 6.0 Sie authenticate(Connection c, String username, String credentials) Methode haben außer Kraft zu setzen.

Sie können auch den oben beschriebenen Ansatz im Rahmen der Migrationsstrategie verwenden: haben die überschriebene Methode Unterstützung sowohl die OLD_PASSWORD() und verdauen und Kraft-Benutzer, die authentifiziert haben mit OLD_PASSWORD() ihr Passwort zu ändern. Mit der Zeit werden Sie dann hoffentlich in der Lage sein, um Standard-Digest-basierten Ansatz zu wechseln.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top