데이터베이스 간 소유권 체인이 활성화된 Cloud SQL 인스턴스

데이터베이스 간 소유권 체인은 권한 검사가 다른 데이터베이스의 객체까지 이어지는 방식에 영향을 줍니다. 기존 의존성을 확인하고 불필요한 체인을 제거하세요.

설명

SQL Server의 소유권 체인은 참조하는 객체와 참조되는 객체의 소유자가 같고 관련 조건이 충족되면, 참조되는 객체의 권한 검사를 생략할 수 있게 합니다. 이 체인이 데이터베이스 경계를 넘으면 의도한 범위 밖의 객체에도 접근할 위험이 있습니다.

Cloud SQL은 모든 SQL Server 버전에서 cross db ownership chaining을 사용 중단 대상으로 지정했으며, 새로 on을 설정할 수 없다고 안내합니다. 기존에 활성화된 경우에는 애플리케이션 의존성을 확인한 뒤 플래그를 제거하거나 off로 바꾸세요.

잠재적 영향

  • 소유권 체인과 과도한 데이터베이스 권한이 결합하면 의도하지 않은 데이터베이스 접근이나 권한 상승이 가능할 수 있습니다.
  • 기존 체인에 의존하는 작업을 확인하지 않고 비활성화하면 애플리케이션의 데이터베이스 간 작업이 실패할 수 있습니다.

해결 방법

  • 데이터베이스 간 접근이 필요한 작업과 관련 계정·객체 권한을 확인한 뒤, 기존 cross db ownership chaining 플래그를 제거하거나 문자열 off로 설정하세요.
  • 필요한 접근은 최소 권한으로 구성하고, Cloud SQL이 안내하는 인증서로 서명한 저장 프로시저 방식을 검토하세요. 변경 후 필요한 작업이 동작하고 허용하지 않은 접근은 거부되는지 확인하세요.
  • 기존 인스턴스는 Cloud SQL 콘솔이나 지원되는 관리 도구/API로 변경하세요. google.cloud 1.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

플래그를 끄는 설정입니다. 필요한 데이터베이스 간 접근을 별도로 구성하고 정상 업무가 계속 동작하는지 확인하세요.

참조