gpt4 book ai didi

java - MySQL PASSWORD() 函数的 JDBCRealm 摘要

转载 作者:行者123 更新时间:2023-11-29 15:09:23 25 4
gpt4 key购买 nike

对于内部 Tomcat/Java/Struts 应用程序,我们正在将自定义编写的身份验证代码转换为使用 JDBCRealm。数据库是MySQL 5.0,密码存储为PASSWORD()加密字符串。在我们的 MySQL 版本中,PASSWORD() function是非标准(专有?)41 字节哈希值。 (我现在知道我们不应该使用它作为密码,而应该使用 SHA1()MD5()。但我们在这里。)

是否有任何方法可以使用 JDBMRealm,而不强制所有用户重新输入密码,以便我们可以重新编码?是否有 JDBCRealm 摘要允许我们针对 PASSWORD() 编码的密码列进行身份验证?

最佳答案

新的 MySQL 版本 provide a function称为 OLD_PASSWORD(),以向后兼容 4.0 及更早版本的方式消化密码。

因此,你能做的就是configure JDBCRealm以这样的方式:

  1. 本身不使用任何类型的摘要。即使在安全环境中,这显然也不理想,并且如果您的数据库服务器存在于不受信任的连接中,那么这将是非常危险的。您可以通过不指定 digest 属性来实现此目的。
  2. 使用上面的 OLD_PASSWORD() 函数对密码进行加密,然后将其与数据库中的密码进行比较。您必须扩展 JDBCRealm,此功能不是开箱即用的。对于 Tomcat 6.0,您必须重写 authenticate(Connection c, String username, String credential) 方法。

您还可以使用上述方法作为迁移策略的一部分:让覆盖的方法支持 OLD_PASSWORD() 并摘要并强制使用 OLD_PASSWORD()< 进行身份验证的用户 更改密码。随着时间的推移,您将有望切换到标准的基于摘要的方法。

关于java - MySQL PASSWORD() 函数的 JDBCRealm 摘要,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1244607/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com