0

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

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

4

1 に答える 1

1

新しいMySQLバージョンは、 4.0以前との下位互換性のある方法でパスワードをダイジェストするという関数を提供します。OLD_PASSWORD()

したがって、実行できることは、次のようにJDBCRealmを構成することです。

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

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

于 2009-08-07T16:55:11.440 に答える