설명
cross db ownership chaining은 조건을 충족하는 데이터베이스 간 소유권 연결을 허용합니다. 참조하는 객체와 참조된 객체의 소유자가 같고 연결이 적용되면 참조된 객체의 권한 검사가 생략될 수 있어, 의도하지 않은 데이터 접근이 가능해질 수 있습니다.
Cloud SQL은 모든 SQL Server 버전에서 이 플래그를 지원 중단 대상으로 지정했으며 새로 on을 설정할 수 없습니다. 기존 인스턴스에서 이 플래그가 켜져 있다면 종속성을 확인한 뒤 해당 플래그를 제거하거나 off로 바꿔야 합니다.
잠재적 영향
- 한 데이터베이스의 객체를 변경할 수 있는 사용자가 다른 데이터베이스의 자료에 접근할 위험이 커질 수 있습니다.
- 의존 절차를 확인하지 않고 끄면 데이터베이스 간 작업이 실패할 수 있습니다.
해결 방법
- 기존
cross db ownership chaining을 제거하거나off로 설정하기 전에 데이터베이스 간 호출과 소유권을 확인하세요. - 필요한 접근은 명시적 최소 권한이나 서명된 저장 프로시저 등 지원되는 방식으로 구성하고, 정상 업무와 불필요한 접근 차단을 시험하세요.
예시
인스턴스 설정 일부를 비교하는 예제입니다. 실제 지원되는 엔진 버전과 SQL Server용 머신 유형을 사용하고, var.sql_server_tier와 생략된 필수 입력을 준비하세요. 이 플래그 변경에 예제와 같은 엔진 버전 변경이 필요한 것은 아닙니다. 변경 전의 on은 과거 구성 예시이며 현재 새 인스턴스에 적용할 설정이 아닙니다.
변경 전
hcl
resource "google_sql_database_instance" "db" {
name = "sqlserver-instance"
database_version = "SQLSERVER_2017_EXPRESS"
region = "us-central1"
settings {
database_flags {
name = "cross db ownership chaining"
value = "on"
}
}
}
변경 후
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 = "cross db ownership chaining"
value = "off"
}
}
}
설명:
- 변경 전: 데이터베이스 간 소유권 연결을 켠 과거 구성을 보여 줍니다. 모든 데이터베이스 접근을 무조건 허용한다는 뜻은 아닙니다.
- 변경 후: 플래그를 끕니다. 필요한 교차 데이터베이스 작업에는 적절한 권한 구성이 필요합니다.