2010-08-04 5 views
6

(필수 액세스 제어 감시와 같이) 큰 형제로 작동하는 보안 시스템의 경우, 최대 절전 모드가 생성하는 모든 선택 진술을 가로 채고 처리해야합니다. 사용자, 타임 스탬프 및 SQL select를 데이터베이스에 저장하여 다른 도구로 일부 프로파일 링을 활성화합니다. 이 정보를 통해 사용자가 보려고 한 정보를 확인할 수 있습니다. select 문에 대해 준비된 속성은 가치가 있습니다. 모든 매개 변수를 포함하는 완전한 SQL 문이 필요합니다.Hibernate가 생성 한 SQL을 인터셉트하는 방법은 무엇입니까?

우리가이 모든 것을 처리하고 처리 할 수있는 청취자 또는 인터셉터가 있습니까? 지금까지 가장 큰 문제점은 명령문 매개 변수를 수집하는 것입니다.

+0

mkyong은 p6spy.jar가 매개 변수 값이있는 최대 절전 모드 쿼리를 표시한다고 주장합니다. 아마 당신이 이것을 시도해 볼 수 있습니다 http://www.mkyong.com/hibernate/how-to-display-hibernate-sql-parameter-values-solution/ – Naveen

답변

3

org.hibernate package is set to DEBUG, and with the hibernate.show_sql property set. 로깅 수준에서 데이터베이스 자체에 로거 출력을 사용하려는 경우 실제 매개 변수 값을 사용할 수 있습니다 (본인이 아는 한도 내에서).

또는 다음을 주장 log4jdbc project 봐, 걸릴 수 : 기록 된 출력에서 ​​

준비 명령문을 바인드 인수가 자동으로 SQL 출력에 삽입 이다. 이것은 많은 경우에 대한 가독성과 디버깅을 크게 향상시킵니다.

적합하지 않은 경우 P6Spy can be used in your situation을 조사 할 수 있습니다. WebLogic Server에서는 특정 데이터베이스에 대한 WebLogic JDBC 드라이버와 함께 제공되는 WebLogic JDBC Spy을 통해 동일한 기능을 수행합니다. 이 두 가지 모두 System.out에 쓰는 것이지 데이터베이스에 쓰는 것은 아닙니다 (실수하지 않는 한). 그렇게 유용하지 않을 수도 있습니다.

+0

이것은 아주 잘 작동합니다. 저는 데이터베이스에 문장을 작성하기 위해 직접 작성한 appender를 작성했습니다. 내 말은이 문장을 해고 한 해당 사용자를 얻는 방법뿐입니다. 이것은 거의 해결하기가 불가능합니다. 어떤 아이디어? – codevour

+1

나는 이것에 대해 잘 모르겠다. 기본적으로 SQL 문을 실행중인 사용자/사용자를 기록중인 데이터에 매핑해야합니다. SLF4J/log4j/logback에서 이것은 MDC - Mapped Diagnostic Context에 의해 달성됩니다. 교장을 수용 할 수 있도록 패턴 문자열을 수정해야합니다. MDC가 로그백에서 작동하도록하는 기사가 도움이 될 것입니다 - http://logback.qos.ch/manual/mdc.html 그런데 appender 패턴 문자열이 사용자를 반영하도록 수정 될 수 있다면 MDC가 필요하지 않습니다. (형식 문자열이 누락 된 경우). –

+0

대단히 감사합니다. log4jdbc 프로젝트를 가장 적극적으로 선택했습니다.이 작업은 매우 성공적이었습니다. 다시 한번 감사드립니다. – codevour

3

당신은 Interceptor.prepareSQL()은 (3.1 이상) 준비된 문을 차단하는 데 사용할 수있는 감사드립니다.

추상화 단계에서 벗어나지 않고 실제 매개 변수를 얻을 수 있다고 생각하지 않습니다. 가능한 해결책은 JDBC 프록시 드라이버를 사용하는 것입니다 (P6Spy 참조).

희망이 있습니다.

+0

예,이 인터페이스를 아는 것, 한정된 매개 변수를 어디서 구할 수 있습니까? 내가 아는 한 실제 매개 변수를 가져올 방법이 없습니다. – codevour

+0

정확히 말해서, 그것은 'Interceptor # onPrepareStatement (String sql)'입니다. 그러나 이것은 생성 된 * 쿼리가 아닌 준비중인 SQL 문자열에 대한 액세스를 제공합니다. –

관련 문제