Java 확장
작성자: 송룡치(Song Longqi)
SQL 탈둔감 처리¶
OpenTelemetry Java Agent는 기본적으로 SQL을 탈둔감 처리합니다. db.statement의 파라미터 값이 ?로 대체되어 민감 정보 유출 위험을 낮춥니다.
공식 설명은 다음을 참조하세요.
DB statement sanitization
기본 탈둔감 처리 동작은 다음과 같습니다.
- 값(문자열, 숫자)을 플레이스홀더로 대체
- 공백 문자(여러 공백, 줄바꿈)를 압축하여 일관된 표시 제공
예시¶
ps = conn.prepareStatement("SELECT name,password,id FROM student where name=? and password=?");
ps.setString(1, username); // set 파라미터 플레이스홀더 1
ps.setString(2, password); // set 파라미터 플레이스홀더 2
트레이스에는 다음과 같이 표시됩니다.
SELECT name,password,id FROM student where name=? and password=?
인라인 SQL을 사용하는 경우(민감 데이터 시나리오에서는 권장하지 않음):
ps = conn.prepareStatement("SELECT name,password,id FROM student where name='abc' and password='123456'");
트레이스는 원본 SQL 텍스트를 유지합니다.
파라미터 탈둔감 처리 수집 활성화(확장)¶
setXXX 파라미터가 채워진 SQL 내용을 가져와야 하는 경우 다음 설정 중 하나를 활성화하세요.
V2 확장에서 공식 파라미터를 사용할 수도 있습니다.
-Dotel.instrumentation.jdbc.experimental.capture-query-parameters=true
# or k8s
export OTEL_INSTRUMENTATION_JDBC_EXPERIMENTAL_CAPTURE_QUERY_PARAMETERS=true
최종적으로 Guance에서 확인되는 트레이스 상세는 다음과 같습니다.
자주 묻는 질문¶
-Dotel.jdbc.sql.obfuscation=true를 활성화했는데도 일부 파라미터가 대체됩니다.
일부 파라미터는 db.statement 처리 단계에서 이미 대체되었을 수 있습니다. 플레이스홀더와 origin_sql_x 개수가 일치하지 않는 것은 정상입니다.
- 원본 SQL을 활성화하면 내용이 길어지고 줄바꿈이 많아집니다.
이로 인해 트레이스 볼륨이 커집니다. 트레이스 보존 정책 및 필드 길이 정책과 함께 저장 영향도를 평가하는 것이 좋습니다.
자세한 내용은 다음을 참조하세요.