설명
MySQL의 local_infile은 LOAD DATA LOCAL을 통해 클라이언트가 읽을 수 있는 파일을 서버로 전송하는 기능과 관련됩니다. 서버와 클라이언트 양쪽에서 허용해야 사용할 수 있으며, 실제 처리는 SQL 권한과 클라이언트 프로세스의 파일 접근 범위에도 달려 있습니다.
이는 데이터베이스 서버의 임의 파일을 읽는 기능과 다릅니다. 특히 신뢰할 수 없는 서버에 연결하는 클라이언트는 의도하지 않은 파일 전송 요청을 받을 수 있습니다.
잠재적 영향
- 클라이언트가 읽을 수 있는 민감한 파일이 서버로 전송될 수 있습니다.
- 불필요한 파일 반입 기능이 애플리케이션의 공격 가능 범위를 넓힐 수 있습니다.
해결 방법
- 업무상 필요하지 않으면
databaseFlags의local_infile을off로 설정하고 클라이언트에서도 LOCAL 기능을 제한하세요. - 필요한 경우 신뢰할 수 있는 서버에만 연결하고 전송 가능한 파일과 SQL 권한을 최소화하세요.
- 다른 필요한 플래그를 유지하면서 변경하고 실제 설정 및 필요한 가져오기 작업을 검증하세요.
예시
Deployment Manager 지원은 종료되었습니다. 다음은 기존 MySQL 5.7 구성의 발췌입니다. 실제 사용할 엔진의 지원 상태와 업그레이드 계획을 확인하고, tier·리전 등 필요한 설정을 지원되는 관리 도구에서 준비하세요.
변경 전
yaml
resources:
- name: db-instance
type: sqladmin.v1beta4.instance
properties:
databaseVersion: MYSQL_5_7
settings:
databaseFlags:
- name: local_infile
value: "on"
서버에서 local_infile을 허용합니다. 클라이언트 설정과 권한도 충족해야 파일 전송이 가능합니다.
변경 후
yaml
resources:
- name: db-instance
type: sqladmin.v1beta4.instance
properties:
databaseVersion: MYSQL_5_7
settings:
databaseFlags:
- name: local_infile
value: "off"
서버의 LOCAL 파일 로드를 끕니다. 클라이언트 설정과 다른 데이터 가져오기 경로도 별도로 검토하세요.