質問

内部 Tomcat/Java/Struts アプリケーションの場合、JDBCRealm を使用するようにカスタム作成された認証コードを変換しています。データベースは MySQL 5.0 で、パスワードは次のように保存されます。 PASSWORD()-暗号化された文字列。私たちのバージョンの MySQL では、 PASSWORD() 関数 は非標準 (独自の?) 41 バイトのハッシュです。(パスワードにこれを使用すべきではなく、代わりに使用すべきであることがわかりました。 SHA1() または MD5(). 。しかし、ここにいます。)

パスワードを再エンコードできるように、すべてのユーザーにパスワードの再入力を強制せずに JDBMRealm を使用する方法はありますか?に対する認証を可能にする JDBCRealm ダイジェストはありますか? PASSWORD()-エンコードされたパスワード列?

役に立ちましたか?

解決

新しい MySQL バージョン 機能を提供する 呼ばれた OLD_PASSWORD() 4.0 以前との下位互換性のある方法でパスワードをダイジェストします。

したがって、あなたにできることは、 JDBCRealm を構成する 次のような方法で:

  1. いかなる種類のダイジェストも単独では使用しません。これは安全な環境であっても明らかに理想的ではなく、データベース サーバーが信頼できない接続を介して存在する場合はまったく危険です。これを行うには、指定しないでください digest 属性。
  2. 上記を使用します OLD_PASSWORD() データベースのパスワードと比較する前にパスワードを暗号化する機能。JDBCRealm を拡張する必要がありますが、この機能はそのままでは提供されません。Tomcat 6.0 の場合はオーバーライドする必要があります authenticate(Connection c, String username, String credentials) 方法。

上記のアプローチを移行戦略の一部として使用することもできます。オーバーライドされたメソッドが両方をサポートするようにします。 OLD_PASSWORD() を使用して認証したユーザーをダイジェストして強制します OLD_PASSWORD() パスワードを変更します。時間が経てば、標準的なダイジェストベースのアプローチに切り替えられるようになるでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top