> 데이터 베이스 > MySQL 튜토리얼 > MySQL 및 Java에서 준비된 명령문을 사용하여 동적 열 이름으로 데이터를 검색하려면 어떻게 해야 합니까?

MySQL 및 Java에서 준비된 명령문을 사용하여 동적 열 이름으로 데이터를 검색하려면 어떻게 해야 합니까?

Susan Sarandon
풀어 주다: 2025-01-19 17:32:09
원래의
716명이 탐색했습니다.

How Can I Retrieve Data with Dynamic Column Names Using Prepared Statements in MySQL and Java?

Prepared 문을 사용한 MySQL 및 Java의 동적 열 이름 검색: 더 안전한 접근 방식

많은 MySQL 및 Java 개발자는 준비된 문을 사용하여 동적으로 생성된 열 이름으로 데이터를 검색해 왔습니다. 그러나 열 이름을 준비된 문의 매개 변수로 직접 대체하는 것은 지원되지 않으며 상당한 보안 위험이 발생합니다. 일반적으로 데이터베이스 스키마 재설계가 최선의 솔루션입니다.

아래와 같이 준비된 명령문을 이런 방식으로 사용하려고 하면 오류가 발생합니다.

String columnNames = "d,e,f";
String query = "SELECT a,b,c,?" + " FROM " + name + " WHERE d=?"; 
// This results in "SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'", not the desired result.
로그인 후 복사

쿼리는 ? 자리 표시자를 열 이름이 아닌 문자열 리터럴로 처리합니다.

SQL 삽입 취약점을 방지하기 위한 보다 강력한 방법은 데이터베이스 자체 내에 동적 열 이름을 저장하는 것입니다. 다음 열이 있는 "user_data"와 같은 테이블을 고려해 보세요.

  • id(기본 키)
  • user_name
  • column_names(쉼표로 구분된 열 이름 문자열)

그런 다음 이 테이블에서 검색된 column_names을 연결하여 SQL 쿼리를 구성할 수 있습니다.

String query = "SELECT a,b,c," + columnNames + " FROM " + name + " WHERE d=?";
로그인 후 복사

이 접근 방식을 사용하면 열 이름이 주입 공격에 취약한 매개변수로 처리되지 않습니다. 문자열 연결을 사용하는 동안 취약한 부분(열 이름)은 데이터베이스에서 검색되어 이미 삭제되었습니다. 쿼리 생성에 사용되는 사용자 제공 데이터는 SQL 문의 직접적인 부분이 아니더라도 항상 삭제해야 합니다. 이 수정된 접근 방식은 동적 열 이름을 처리하기 위한 더 안전하고 관리하기 쉬운 솔루션을 제공합니다.

위 내용은 MySQL 및 Java에서 준비된 명령문을 사용하여 동적 열 이름으로 데이터를 검색하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿