설명
SQL Server의 포함된 데이터베이스 인증은 인스턴스 로그인에만 의존하지 않고 데이터베이스에서 사용자를 인증할 수 있게 합니다. 인증을 없애는 기능은 아니지만, ALTER ANY USER 같은 권한을 가진 데이터베이스 사용자가 다른 사용자에게 접근을 허용할 수 있으므로 권한 관리 범위를 넓혀 확인해야 합니다.
이 기능이 필요하지 않은 Cloud SQL 인스턴스에서는 contained database authentication을 비활성화하세요. 기능을 사용한다면 인스턴스 로그인과 포함된 데이터베이스 사용자를 모두 관리해야 합니다.
잠재적 영향
- 사용자 관리 권한이 과도하면 의도하지 않은 계정에 데이터베이스 접근이 허용될 수 있습니다.
- 인스턴스 로그인만 점검하면 포함된 데이터베이스 사용자의 접근 권한을 놓칠 수 있습니다.
해결 방법
- 기존 사용자와 애플리케이션의 인증 방식을 확인하고, 기능이 불필요하면
contained database authentication을 문자열off로 설정하세요. 기능을 유지할 때는ALTER ANY USER같은 권한을 필요한 사용자로 제한하세요. - 기존 인스턴스는 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: contained database authentication
value: on
tier: db-n1-standard-1
state: present
contained database authentication을 켜는 설정입니다. 데이터베이스 사용자와 사용자 관리 권한을 함께 관리해야 합니다.
비교 설정
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: contained database authentication
value: off
tier: db-n1-standard-1
state: present
기능이 필요하지 않을 때는 플래그를 끄세요. 적용 전에 포함된 데이터베이스 인증에 의존하는 연결이 없는지 확인해야 합니다.