2009-08-07 2 views
0

내부 Tomcat/Java/Struts 애플리케이션의 경우 JDBCRealm을 사용하도록 사용자 정의 작성 인증 코드를 변환합니다. 데이터베이스는 MySQL 5.0이며 암호는 PASSWORD() 암호화 된 문자열로 저장됩니다. MySQL 버전에서 PASSWORD() function은 비표준 (독점적 인) 41 바이트 해시입니다. (나는 우리가 여기에 우리가 우리의 암호를 위해 그것을 사용하지 않아야하지만, 대신 SHA1() 또는 MD5()를 사용한다는 것을 이제 알고있다.하지만.)MySQL PASSWORD() 함수에 대한 JDBCRealm 다이제스트

다시 모든 사용자를 시작하지 않고 JDBMRealm를 사용하는 방법은 없나요 암호를 다시 입력하여 암호를 다시 입력 할 수 있습니까? PASSWORD() 인코딩 된 암호 열에 대해 인증 할 수있는 JDBCRealm 다이제스트가 있습니까?

답변

1

새 MySQL 버전 provide a functionOLD_PASSWORD()은 4.0 이전 버전과 역방향으로 암호를 소화합니다.

  1. 자체적으로 소화의 어떤 종류를 사용하지 않습니다 : 당신이 할 수있는 일

    따라서,이 방식으로 configure JDBCRealm이다. 이것은 안전한 환경에서도 분명히 이상적이지 않으며 데이터베이스 서버가 신뢰할 수없는 연결을 통해 살아있을 경우 완전히 위험합니다. digest 특성을 지정하지 않으면이 작업을 수행 할 수 있습니다.

  2. 위의 OLD_PASSWORD() 함수를 사용하여 데이터베이스의 암호와 비교하기 전에 암호를 암호화합니다. JDBCRealm을 확장해야합니다.이 기능은 기본적으로 제공되지 않습니다. Tomcat 6.0의 경우 authenticate(Connection c, String username, String credentials) 메소드를 무시해야합니다.

또한 마이그레이션 전략의 일환으로 위의 방법을 사용할 수는 : 오버라이드 (override) 된 메소드 지원 모두 OLD_PASSWORD()을 가지고 자신의 암호를 변경 OLD_PASSWORD()을 사용하여 인증 한 사용자를 소화하고 힘. 그러면 시간이 지나면 표준 다이제스트 기반 방식으로 전환 할 수있게 될 것입니다.

+0

나는 이것을 다른 사람들을위한 해결책으로 표시했지만 우리는 사용자를 괴롭 히더라도 Rightthing을 수행하고 모든 암호를 MD5로 인코딩하기로 결정했습니다. – Plutor

+0

나는 당신을 부러워 할 수 있습니다 - 나는 내 사용자를 괴롭히지 않을 수있었습니다 :-) – ChssPly76

관련 문제