MySQL PASSWORD() 函数的 JDBCRealm 摘要
对于内部 Tomcat/Java/Struts 应用程序,我们正在将自定义编写的身份验证代码转换为使用 JDBCRealm。 数据库是MySQL 5.0,密码存储为PASSWORD()
加密字符串。 在我们的 MySQL 版本中,PASSWORD()< /code> function
是一个非标准(专有?)41 字节哈希值。 我们不应该使用它作为密码,而应该使用
SHA1()
或 MD5()
。但我们在这里。)
(我现在知道 有什么方法可以使用 JDBMRealm 而不强制所有用户重新输入密码,以便我们可以重新编码? 是否有 JDBCRealm 摘要允许我们针对 PASSWORD()
编码的密码列进行身份验证?
For an internal Tomcat/Java/Struts application, we're converting custom-written authentication code to use JDBCRealm. The database is MySQL 5.0, and the passwords are stored as PASSWORD()
-encrypted strings. In our version of MySQL, the PASSWORD()
function is a non-standard (proprietary?) 41-byte hash. (I know now that we shouldn't be using it for our passwords, but should instead be using SHA1()
or MD5()
. But here we are.)
Is there any way to use JDBMRealm without forcing all of our users to re-enter their passwords so we can re-encode them? Is there a JDBCRealm digest that will allow us to authenticate against a PASSWORD()
-encoded password column?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
新的 MySQL 版本提供了一个名为
的函数
OLD_PASSWORD()
以向后兼容 4.0 及更早版本的方式消化密码。因此,您可以做的是配置 JDBCRealm这样它:
digest
属性来实现此目的。OLD_PASSWORD()
函数对密码进行加密,然后将其与数据库中的密码进行比较。 您必须扩展 JDBCRealm,此功能不是开箱即用的。 对于 Tomcat 6.0,您必须重写authenticate(Connection c, String username, String credential)
方法。您还可以使用上述方法作为迁移策略的一部分:让重写的方法支持
OLD_PASSWORD()
并摘要并强制使用OLD_PASSWORD()
进行身份验证的用户更改他们的密码。 随着时间的推移,您将有望切换到标准的基于摘要的方法。New MySQL versions provide a function called
OLD_PASSWORD()
that digests password in a way backwards-compatible with 4.0 and prior.What you can do, therefore, is to configure JDBCRealm in such a way that it:
digest
attribute.OLD_PASSWORD()
function to encrypt the password before comparing it with the one from the database. You will have to extend JDBCRealm, this functionality is not provided out of the box. For Tomcat 6.0 you'll have to overrideauthenticate(Connection c, String username, String credentials)
method.You can also use the above approach as part of migration strategy: have the overridden method support both the
OLD_PASSWORD()
and digest and force users who've authenticated usingOLD_PASSWORD()
to change their password. With time you'll then hopefully be able to switch to standard digest-based approach.