JDBCRealm摘要MySQL密码()function
题
对于一个内部Tomcat/Java/应用程序支柱,我们正在转换定义的书面认证码使用JDBCRealm.该数据库是MySQL5.0和密码存储为 PASSWORD()
-加密串。在我们的版本MySQL, PASSWORD()
功能 是一个非标准(专有的?) 41字节的散列。(我知道现在,我们不应该使用它为我们的密码,但是应代之以使用 SHA1()
或 MD5()
.但是,我们在这里.)
是否有任何方式使用JDBMRealm没有强迫我们所有的用户重新进入他们的密码所以我们可以重新编码?是否有一个JDBCRealm摘要,这将使我们能够进行身份验证对 PASSWORD()
-列编码的密码?
解决方案
新MySQL版本 提供一个功能 叫 OLD_PASSWORD()
摘要密码的方式向后兼容4.0和前。
你可以做什么,因此,是 配置JDBCRealm 在这样一种方式,即:
- 不使用任何种类的摘要。这显然是不想即使在安全的环境,是彻头彻尾的危险的,如果你的数据库服务器的生活跨越不信任的连接。你这样做是通过不指定
digest
属性。 - 使用上
OLD_PASSWORD()
功能进行加密的密码才能进行比较,与一个从数据库。你将不得不延长JDBCRealm,这种功能不是提供。为Tomcat6.0你就必须复盖authenticate(Connection c, String username, String credentials)
法。
你也可以使用上述办法的一部分迁移战略:有复盖的方法支持两个 OLD_PASSWORD()
和摘要,并强迫用户人的身份验证的使用 OLD_PASSWORD()
改变自己的密码。有时间然后你会希望能够交换标准摘要为基础的方法。
不隶属于 StackOverflow