문제

내부 Tomcat/Java/Struts 응용 프로그램의 경우, 우리는 jdbcrealm을 사용하도록 사용자 정의 작성 인증 코드를 변환합니다. 데이터베이스는 MySQL 5.0이고 암호는 다음과 같이 저장됩니다. PASSWORD()-암호화 된 문자열. MySQL 버전에서 PASSWORD() 기능 비표준 (독점적?) 41 바이트 해시입니다. (이제 우리는 비밀번호에 사용해서는 안되지만 대신 사용해야한다는 것을 알고 있습니다. SHA1() 또는 MD5(). 그러나 여기 우리는 있습니다.)

모든 사용자가 비밀번호를 다시 인센트로 재입고하도록 강요하지 않고 JDBMREALM을 사용하는 방법이 있습니까? JDBCREALM 다이제스트가 있습니까? PASSWORD()-인코딩 된 비밀번호 열?

도움이 되었습니까?

해결책

새로운 MySQL 버전 기능을 제공하십시오 ~라고 불리는 OLD_PASSWORD() 그 소화는 4.0 및 사전과 호환되는 방식으로 비밀번호를 반대합니다.

그러므로 당신이 할 수있는 일은 JDBCREALM을 구성하십시오 그런 식으로 :

  1. 그 자체로 어떤 종류의 소화도 사용하지 않습니다. 이것은 안전한 환경에서도 이상적이지 않으며 데이터베이스 서버가 신뢰할 수없는 연결에 걸쳐있는 경우 완전히 위험합니다. 당신은 지정하지 않음으로써 이것을합니다 digest 기인하다.
  2. 위의 것을 사용합니다 OLD_PASSWORD() 기능 비밀번호를 데이터베이스에서 비교하기 전에 암호를 암호화합니다. JDBCREALM을 확장해야합니다.이 기능은 상자 밖에서 제공되지 않습니다. Tomcat 6.0의 경우 재정의해야합니다 authenticate(Connection c, String username, String credentials) 방법.

위의 접근 방식을 마이그레이션 전략의 일부로 사용할 수도 있습니다. OLD_PASSWORD() 그리고 사용을 인증 한 사용자를 소화하고 강제합니다 OLD_PASSWORD() 비밀번호를 변경합니다. 시간이 지남에 따라 표준 다이제스트 기반 접근법으로 전환 할 수 있기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top