Cloud SQL MySQL의 로컬 파일 적재 설정 점검

필요하지 않은 LOAD DATA LOCAL 기능을 끄고 클라이언트 파일 접근을 제한하세요.

설명

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"
    }
  }
}

설명:

  • 변경 전: 서버에서 로컬 파일 적재를 허용합니다. 실제 사용에는 클라이언트 설정과 권한도 필요합니다.
  • 변경 후: 서버의 로컬 파일 적재를 끕니다. 다른 파일 접근 권한까지 제거하는 것은 아닙니다.

참조