설명
MySQL의 skip_show_database가 off이면 사용자는 SHOW DATABASES를 실행할 수 있지만, 보이는 데이터베이스는 해당 사용자의 권한에 따라 제한됩니다. 이 설정만으로 모든 데이터베이스 이름이나 데이터가 공개되는 것은 아닙니다.
on이면 SHOW DATABASES 권한이 있는 사용자만 이 명령을 실행할 수 있습니다. 그 권한은 전체 목록을 볼 수 있게 하므로 부여 대상도 함께 점검해야 합니다.
잠재적 영향
- 불필요한 데이터베이스 이름 노출은 내부 구조 파악에 이용될 수 있습니다.
- 목록 조회를 일괄 제한하면 이를 사용하는 관리 도구가 동작하지 않을 수 있습니다.
해결 방법
- 일반 계정의 목록 조회를 제한해야 한다면
skip_show_database를on으로 설정하고SHOW DATABASES및 광범위한 전역 권한의 부여 대상을 최소화하세요. - 변경 전 관리 도구와 애플리케이션의 의존성을 확인하고 필요한 조회가 가능한지 시험하세요. 실제 데이터 접근 권한도 별도로 제한하세요.
예시
인스턴스 설정 일부를 보여 주는 예제입니다. 실제 지원되는 엔진 버전과 머신 유형을 선택하고 생략된 필수 설정을 준비하세요.
변경 전
hcl
resource "google_sql_database_instance" "db" {
name = "mysql-instance"
database_version = "MYSQL_8_0"
region = "us-central1"
settings {
database_flags {
name = "skip_show_database"
value = "off"
}
}
}
변경 후
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 = "skip_show_database"
value = "on"
}
}
}
설명:
- 변경 전: 명령 사용을 허용하되 표시되는 이름은 사용자의 권한에 따릅니다.
- 변경 후: 명령 실행에 SHOW DATABASES 권한을 요구합니다. 그 권한의 부여 범위도 점검해야 합니다.