설명
SQL Server의 소유권 체인은 참조하는 객체와 참조되는 객체의 소유자가 같고 관련 조건이 충족되면, 참조되는 객체의 권한 검사를 생략할 수 있게 합니다. 이 체인이 데이터베이스 경계를 넘으면 의도한 범위 밖의 객체에도 접근할 위험이 있습니다.
Cloud SQL은 모든 SQL Server 버전에서 cross db ownership chaining을 사용 중단 대상으로 지정했으며, 새로 on을 설정할 수 없다고 안내합니다. 기존에 활성화된 경우에는 애플리케이션 의존성을 확인한 뒤 플래그를 제거하거나 off로 바꾸세요.
잠재적 영향
- 소유권 체인과 과도한 데이터베이스 권한이 결합하면 의도하지 않은 데이터베이스 접근이나 권한 상승이 가능할 수 있습니다.
- 기존 체인에 의존하는 작업을 확인하지 않고 비활성화하면 애플리케이션의 데이터베이스 간 작업이 실패할 수 있습니다.
해결 방법
- 데이터베이스 간 접근이 필요한 작업과 관련 계정·객체 권한을 확인한 뒤, 기존
cross db ownership chaining플래그를 제거하거나 문자열off로 설정하세요. - 필요한 접근은 최소 권한으로 구성하고, Cloud SQL이 안내하는 인증서로 서명한 저장 프로시저 방식을 검토하세요. 변경 후 필요한 작업이 동작하고 허용하지 않은 접근은 거부되는지 확인하세요.
- 기존 인스턴스는 Cloud SQL 콘솔이나 지원되는 관리 도구/API로 변경하세요.
google.cloud1.14.0의 SQL 인스턴스 모듈은 기존 객체를 업데이트하지 못합니다. 플래그 목록을 교체할 때는 필요한 다른 플래그도 보존하세요.
예시
다음은 과거 설정 예시입니다. SQLSERVER_13_1은 현재 문서화된 Cloud SQL 버전 식별자가 아니며, 첫 번째 예제의 on도 현재 새로 설정할 수 없습니다. 실제 구성에는 지원되는 버전을 사용하고 플래그 값은 "off"처럼 문자열로 명시하세요.
첫 번째 설정
yaml
- name: sql_instance
google.cloud.gcp_sql_instance:
auth_kind: serviceaccount
database_version: SQLSERVER_13_1
name: "{{ resource_name }}-2"
project: test_project
region: us-central1
service_account_file: /tmp/auth.pem
settings:
database_flags:
- name: cross db ownership chaining
value: on
tier: db-n1-standard-1
state: present
데이터베이스 간 소유권 체인이 활성화된 과거 설정입니다. 기존 환경에서 사용 중이라면 데이터베이스 간 권한과 애플리케이션 의존성을 점검하세요.
비교 설정
yaml
- name: sql_instance
google.cloud.gcp_sql_instance:
auth_kind: serviceaccount
database_version: SQLSERVER_13_1
name: '{{ resource_name }}-2'
project: test_project
region: us-central1
service_account_file: /tmp/auth.pem
settings:
database_flags:
- name: cross db ownership chaining
value: off
tier: db-n1-standard-1
state: present
플래그를 끄는 설정입니다. 필요한 데이터베이스 간 접근을 별도로 구성하고 정상 업무가 계속 동작하는지 확인하세요.