설명
SQL Server의 user options는 새 연결에 적용할 세션 기본 옵션의 비트마스크입니다. 0이 아닌 값이 곧 위험한 권한 부여를 뜻하지 않으며, 예제의 32는 ANSI_NULLS 옵션입니다.
세션은 SET 문으로 옵션을 변경할 수 있고 기존 연결에는 서버 기본값 변경이 즉시 적용되지 않습니다. 업무에 맞지 않는 기본값은 쿼리 동작이나 데이터 처리 결과를 바꿀 수 있습니다.
잠재적 영향
- 예상과 다른 NULL 비교나 다른 세션 동작이 애플리케이션 오류를 유발할 수 있습니다.
- 일괄 초기화하면 특정 옵션을 전제로 한 워크로드가 중단될 수 있습니다.
해결 방법
user options의 비트별 의미와 애플리케이션이 설정하는 세션 옵션을 확인하세요. 불필요한 전역 기본값만 제거하고 0을 보편적인 보안 수정으로 적용하지 마세요.- 새 연결에서 실제 옵션과 쿼리 결과를 시험하고 연결 풀의 갱신 및 변경 복구 절차를 준비하세요.
예시
인스턴스 설정 일부를 비교하는 예제입니다. 실제 지원되는 엔진 버전과 SQL Server용 머신 유형을 사용하고, var.sql_server_tier와 생략된 필수 입력을 준비하세요. 이 플래그 변경에 예제와 같은 엔진 버전 변경이 필요한 것은 아닙니다.
변경 전
hcl
resource "google_sql_database_instance" "db" {
name = "sqlserver-instance"
database_version = "SQLSERVER_2017_EXPRESS"
region = "us-central1"
settings {
database_flags {
name = "user options"
value = "32"
}
}
}
변경 후
hcl
resource "google_sql_database_instance" "db" {
name = "sqlserver-instance"
database_version = "SQLSERVER_2019_STANDARD"
region = "us-central1"
settings {
tier = var.sql_server_tier
database_flags {
name = "user options"
value = "0"
}
}
}
설명:
- 변경 전: 32는 새 연결의 ANSI_NULLS 기본 옵션을 지정합니다. 그 자체로 추가 접근 권한을 주지 않습니다.
- 변경 후: 0으로 추가 user options 비트를 지정하지 않습니다. 필요한 세션 동작이 유지되는지 확인해야 합니다.