Pergunta

Para uma aplicação interna Tomcat / Java / Struts, estamos convertendo código de autenticação de costume escrita para utilizar JDBCRealm. O banco de dados é MySQL 5.0, e as senhas são armazenadas como strings criptografadas-PASSWORD(). Em nossa versão do MySQL, o PASSWORD() função é um não-padrão (proprietário?) 41-byte de hash. (Eu sei agora que não deve usá-lo para nossas senhas, mas deveria, antes, usando SHA1() ou MD5(). Mas aqui estamos nós.)

Existe alguma maneira de usar JDBMRealm sem forçar todos os nossos usuários para re-inserir suas senhas para que possamos voltar a codificá-los? Existe uma JDBCRealm digerir que nos permitirá autenticar contra uma coluna de senha codificada em PASSWORD()?

Foi útil?

Solução

versões New MySQL fornecer uma função chamada OLD_PASSWORD() essa senha digere de uma forma compatível com os 4.0 e anteriores.

O que você pode fazer, portanto, é configure JDBCRealm de tal forma a que:

  1. não usa qualquer tipo de digerir por si só. Isso obviamente não é ideal, mesmo em ambiente seguro e é completamente perigoso se o seu servidor de banco de dados vive do outro lado conexão não confiável. Para fazer isso, não especificando atributo digest.
  2. Utiliza a função OLD_PASSWORD() acima para criptografar a senha antes comparando-a com a do banco de dados. Você vai ter que estender JDBCRealm, esta funcionalidade não é fornecido fora da caixa. Para Tomcat 6.0 você terá que substituir o método authenticate(Connection c, String username, String credentials).

Você também pode usar a abordagem acima como parte da estratégia de migração: ter o substituído apoio método tanto a OLD_PASSWORD() e digerir e força os usuários que já autenticados usando OLD_PASSWORD() para alterar sua senha. Com o tempo você vai, em seguida, espero ser capaz de mudar para abordagem padrão digerir-based.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top