설명
MySQL의 local_infile은 LOAD DATA LOCAL을 통해 클라이언트 컴퓨터의 파일을 서버로 전송하는 기능과 관련됩니다. 서버와 클라이언트 양쪽에서 기능을 허용해야 하며, 실행 계정의 파일 접근 권한과 SQL 권한도 적용됩니다.
신뢰할 수 없는 서버가 클라이언트에 의도하지 않은 파일 전송을 요청할 수 있으므로, 기능이 필요한 연결과 클라이언트를 제한해야 합니다. 서버 파일을 읽는 기능과는 다릅니다.
잠재적 영향
- 클라이언트 프로세스가 읽을 수 있는 파일이 의도하지 않게 전송될 수 있습니다.
- 정상적인 파일 적재 업무가 있다면 일괄 비활성화로 작업이 실패할 수 있습니다.
해결 방법
- 로컬 파일 적재가 필요하지 않으면
local_infile을off로 설정하고 클라이언트의 LOCAL 기능도 비활성화하세요. - 필요한 경우 신뢰할 수 있는 서버의 신원을 검증하고, 클라이언트 파일 접근과 SQL 권한을 최소화하세요. 변경 후 필요한 적재 작업을 시험하세요.
예시
인스턴스 설정 일부를 보여 주는 예제입니다. 실제 지원되는 엔진 버전과 머신 유형을 선택하고 생략된 필수 설정을 준비하세요.
변경 전
hcl
resource "google_sql_database_instance" "db" {
name = "mysql-instance"
database_version = "MYSQL_8_0"
region = "us-central1"
settings {
database_flags {
name = "local_infile"
value = "on"
}
}
}
변경 후
hcl
resource "google_sql_database_instance" "db" {
name = "mysql-instance"
database_version = "MYSQL_8_0"
region = "us-central1"
settings {
tier = "db-f1-micro"
database_flags {
name = "local_infile"
value = "off"
}
}
}
설명:
- 변경 전: 서버에서 로컬 파일 적재를 허용합니다. 실제 사용에는 클라이언트 설정과 권한도 필요합니다.
- 변경 후: 서버의 로컬 파일 적재를 끕니다. 다른 파일 접근 권한까지 제거하는 것은 아닙니다.