Snowflake Native App 에서 데이터 내용 공유

이 항목에서는 공급자가 Snowflake Native App 에 공유 데이터 내용을 추가하는 방법에 대해 설명합니다.

참고

공급자는 제한적 평가판 목록으로 Snowflake Native App 을 Snowflake Marketplace 에 게시할 수 있습니다. 앱을 평가판 목록으로 게시하려면 제한적 평가판 목록을 제공할 준비하기 섹션을 참조하십시오.

Snowflake Native App 의 공유 데이터 정보

Snowflake Native App Framework 를 통해 공급자는 앱에 공유 데이터 내용을 추가할 수 있습니다. 이러한 데이터 내용은 앱을 설치하고 사용할 때 컨슈머와 공유됩니다. 데이터 내용을 공유하려면 공급자가 애플리케이션 패키지에 공유 데이터에 대한 권한을 부여해야 합니다. 공급자가 애플리케이션 패키지와 공유하는 데이터 내용은 앱의 설치된 모든 인스턴스에서 공유됩니다.

조심

공유 데이터 내용은 버전이 지정되지 않으므로 앱의 모든 버전이 동일한 데이터를 사용합니다.

컨슈머는 공유 내용에 직접 액세스할 수 없습니다. 대신 공급자는 애플리케이션 패키지의 설정 스크립트에서 보안 뷰를 생성하고 컨슈머에게 보안 뷰에 대한 액세스 권한을 부여합니다. 자세한 내용은 컨슈머가 앱에서 공유 오브젝트에 액세스하도록 허용 섹션을 참조하십시오.

공유 가능한 데이터베이스 오브젝트

공급자는 Snowflake Native App Framework 를 사용하여 다음 데이터베이스 오브젝트를 애플리케이션 패키지에 추가할 수 있습니다.

  • 스키마

  • 외부 및 Apache Iceberg™ 테이블 등의 테이블

참고

테이블 및 뷰와 같은 데이터베이스 오브젝트를 공유할 때 이들을 포함하는 스키마도 공유해야 합니다.

애플리케이션 패키지에서 공유되는 테이블과 뷰에는 다음 제한 사항이 적용됩니다.

  • 테이블에는 Java, Python 또는 JavaScript 코드를 포함하는 정책을 비롯한 가상 열이 있을 수 없습니다.

  • 정책과 같이 뷰 정의 또는 이와 연결된 가상 열은 Java, Python 또는 JavaScript에 대한 호출을 포함할 수 없습니다.

  • 공유 테이블은 임시, 휘발성 또는 일시적 테이블일 수 없습니다.

  • 크로스 클라우드 자동 복제는 외부 또는 Apache Iceberg™ 테이블이 포함된 앱에는 지원되지 않습니다.

정책이 포함된 데이터 콘텐츠 공유에 대한 제한 사항

정책(예: CURRENT_USER)에서 일반적으로 참조하는 일부 함수는 컨슈머 계정에 설치된 앱의 컨텍스트에서 다르게 작동합니다. 공급자가 정의한 정책이 공급자 계정에서는 올바르게 작동할 수 있지만, 컨슈머가 앱을 설치한 후에는 컨슈머 계정에서 올바르게 작동하지 않을 수 있습니다.

Snowflake는 공급자는 설정 스크립트에 지정된 프록시 뷰에 대한 정책을 정의할 것을 권장합니다. 프록시 뷰에서 정책을 정의하면 앱이 설치된 후에는 정책의 정의를 변경할 수 없습니다. 또한 프록시 뷰에 대한 정책을 정의하면 업그레이드 중에 실행 중인 코드가 버전이 생성된 시점에 적용되었던 정책을 계속 사용하게 됩니다.

애플리케이션 패키지에 공유 내용에 대한 권한 부여

앱에 공유 데이터 내용을 포함하려면 공급자가 애플리케이션 패키지와 공유할 오브젝트에 대한 권한을 부여해야 합니다. 공급자가 애플리케이션 패키지에 오브젝트를 추가하면 기본적으로 해당 오브젝트는 애플리케이션 패키지에 비공개로 표시되며 앱이 설치될 때 표시되지 않습니다.

애플리케이션 패키지에서 설치된 앱에 오브젝트를 표시하려면 다음 예제와 같이 GRANT … TO SHARE IN APPLICATION PACKAGE 명령을 사용합니다.

CREATE APPLICATION PACKAGE app_package;

GRANT USAGE ON SCHEMA app_package.shared_schema
  TO SHARE IN APPLICATION PACKAGE app_package;
GRANT SELECT ON TABLE app_package.shared_schema.shared_table
  TO SHARE IN APPLICATION PACKAGE app_package;
Copy

이 예제에서 첫 번째 명령은 애플리케이션 패키지에 shared_schema 스키마에 대한 USAGE 권한을 부여합니다. 이 명령을 사용하면 스키마를 컨슈머와 공유할 수 있습니다. 두 번째 명령은 애플리케이션 패키지에 shared_schema 내의 shared_table 테이블에 대한 SELECT 권한을 부여합니다. 이 명령을 사용하면 컨슈머가 테이블을 쿼리할 수 있습니다.

컨슈머가 애플리케이션 패키지 app_package 에서 애플리케이션을 설치한 후, shared_schema 에 액세스하여 shared_table 을 쿼리할 수 있습니다.

참고

애플리케이션 패키지에 공유 오브젝트를 추가하는 경우 해당 오브젝트가 포함된 스키마도 공유해야 합니다.

유사한 SQL 명령을 사용하여 앱과 뷰를 공유할 수도 있습니다.

애플리케이션 패키지 외부의 오브젝트에 대한 권한 부여

애플리케이션 패키지 외부에 존재하는 데이터베이스 오브젝트를 공유하려면 공급자가 오브젝트에 대한 액세스를 허용하는 애플리케이션 패키지에 뷰를 생성해야 합니다. 애플리케이션 패키지 외부의 오브젝트를 컨슈머 계정에 설치된 앱과 직접 공유할 수 없습니다.

예를 들어, 애플리케이션 패키지 외부에 있는 데이터베이스를 공유하려면 다음 예제와 같이 데이터베이스에 대한 REFERENCE_USAGE 권한을 애플리케이션 패키지에 부여합니다.

GRANT REFERENCE_USAGE ON DATABASE other_db
  TO SHARE IN APPLICATION PACKAGE app_pkg;
Copy

외부 데이터베이스에 REFERENCE_USAGE를 부여한 후 공급자는 다음 예제와 같이 애플리케이션 내에 공유 오브젝트를 참조할 수 있는 뷰를 생성해야 합니다.

CREATE VIEW app_pkg.shared_schema.shared_view
  AS SELECT c1, c2, c3, c4
  FROM other_db.other_schema.other_table;
Copy

이 명령은 애플리케이션 패키지 외부에 있는 데이터베이스, 테이블 및 스키마를 참조하는 뷰를 애플리케이션 패키지에 생성합니다.

뷰를 만든 후 다음 예와 같이 스키마와 뷰에 대한 권한을 애플리케이션에 부여해야 합니다.

GRANT USAGE ON SCHEMA app_pkg.shared_schema
  TO SHARE IN APPLICATION PACKAGE app_pkg;
GRANT SELECT ON VIEW app_pkg.shared_schema.shared_view
  TO SHARE IN APPLICATION PACKAGE app_pkg;
Copy

컨슈머가 앱에서 공유 오브젝트에 액세스하도록 허용

설치 스크립트에서 생성된 데이터베이스 오브젝트는 설치 후 앱에서 직접 액세스할 수 있습니다. 여기에는 테이블, 함수, 프로시저 및 새로운 뷰 정의가 포함됩니다.

그러나 기본적으로 애플리케이션 패키지와 공유되는 데이터베이스 오브젝트는 컨슈머에게 표시되지 않습니다. 컨슈머가 데이터 콘텐츠를 보고 액세스할 수 있도록 하려면 애플리케이션 패키지가 보안 뷰를 생성하고 적절한 권한을 부여해야 합니다.

이 접근 방식의 이점은 다음과 같습니다.

  • 설정 스크립트에서 뷰를 생성하면 새 열과 같은 공유 오브젝트에 대해 직접적으로 이루어진 변경 사항이 설정 스크립트로 설치되는 버전의 Snowflake Native App 에 표시되지 않습니다. 오브젝트 변경에 대한 액세스를 허용하려면 공급자가 앱에 대한 새 버전이나 패치를 생성해야 합니다.

  • 버전이 지정된 스키마에서 뷰를 생성하면 Snowflake Native App 의 각 버전에 해당 버전에 대한 뷰의 정의만 포함됩니다. 이는 업그레이드 시나리오에서 중요합니다.

공유 오브젝트를 컨슈머에게 노출하려면 설정 스크립트에 다음 동작을 위한 명령이 포함되어야 합니다.

  • 애플리케이션 패키지에서 버전이 지정된 스키마 내에 뷰를 설치하는 명령.

  • 애플리케이션 역할을 사용하여 컨슈머에게 해당 뷰에 대한 액세스 권한을 부여하는 명령.

다음 예에서는 애플리케이션 역할을 사용하여 애플리케이션 패키지의 설정 스크립트 내에서 공유 오브젝트에 대한 액세스 권한을 부여하는 방법을 설명합니다.

CREATE APPLICATION ROLE app_user;

CREATE OR ALTER VERSIONED SCHEMA inst_schema;
GRANT USAGE ON SCHEMA inst_schema
  TO APPLICATION ROLE app_user;

CREATE VIEW IF NOT EXISTS inst_schema.shared_view
  AS SELECT c1, c2, c3, c4
  FROM shared_schema.shared_table;

GRANT SELECT ON VIEW inst_schema.shared_view
  TO APPLICATION ROLE app_user;
Copy

이 예제에서 뷰는 shared_schema.shared_view 의 내용에 액세스하여 애플리케이션 패키지와 공유합니다.

참고

공급자가 애플리케이션 패키지 외부의 데이터베이스 오브젝트와 같은 공유 데이터 내용에 직접 액세스하는 뷰를 정의하려고 하면 Snowflake는 오류를 반환합니다.

프록시 뷰에 대한 정책 정의하기

Snowflake에서는 프록시 뷰를 생성하고 설정 스크립트 내에서 이를 보호하는 정책을 정의할 것을 권장합니다. 프록시 뷰를 보호하기 위한 정책을 정의하면 Snowflake Native App 이 설치된 후에 정책 정의가 변경될 수 없습니다. 또한 프록시 뷰에 대한 정책을 정의하면 업그레이드 중에 실행 중인 코드가 업그레이드된 버전이 생성되는 시점에 적용되는 정책을 계속 사용하게 됩니다.

외부 및 Apache Iceberg™ 테이블 지원

Snowflake Native App Framework 를 통해 공급자는 외부 테이블Apache Iceberg™ 테이블 를 컨슈머와 공유할 수 있습니다. 이러한 유형의 테이블을 공유하는 방법은 공급자가 설정 스크립트에 뷰를 추가하고 이러한 뷰에 대한 권한을 애플리케이션 역할에 부여한다는 점에서 일반 테이블과 유사합니다.

조심

지원 오브젝트 스토어가 앱 목록과 동일한 리전에 있지 않은 경우 외부 및 Apache Iceberg™ 테이블은 공급자 또는 컨슈머에게 추가 송신 또는 수신 비용이 발생할 수 있습니다.

외부 테이블이나 Iceberg 테이블을 공유하는 경우 다음과 같은 제한 사항과 요구 사항이 적용됩니다.

  • 외부 및 Iceberg 테이블과 이에 액세스하는 뷰는 앱에서 읽기 전용입니다.

  • 클라우드 간 자동 복제는 외부 또는 Iceberg 테이블을 공유하는 앱에는 지원되지 않습니다.

  • 컨슈머는 공급자 계정에서 앱이 외부 또는 Iceberg 테이블을 사용할 수 있도록 허용해야 앱에서 해당 테이블을 사용할 수 있습니다.

클라우드 간 자동 복제 지원되지 않음

클라우드 간 자동 복제 를 활성화하는 목록이 있는 앱에는 외부 및 Iceberg 테이블이 지원되지 않습니다.

참고

외부 또는 Iceberg 테이블을 사용하는 앱을 여러 Snowflake 리전에 게시하려면 공급자가 각 리전에 목록을 게시해야 합니다.

공급자가 외부 또는 Iceberg 테이블이 포함된 앱에 대한 목록을 생성하는 경우 Snowight에서 클라우드 간 자동 복제를 구성하는 기능이 비활성화됩니다.

공급자가 클라우드 간 자동 복제가 구성된 목록의 데이터 제품인 애플리케이션 패키지에 버전이나 패치를 추가하려고 하면 Snowflake에서 오류가 반환됩니다.

앱에 외부 테이블 또는 Iceberg 테이블 추가

외부 테이블이나 Iceberg 테이블을 애플리케이션 패키지에 추가하는 것 외에도 공급자는 다음을 수행해야 합니다.

공유 오브젝트에 대한 권한을 취소하거나 공유 오브젝트를 삭제할 때 주의할 것

애플리케이션 패키지의 공유 오브젝트에서 권한을 취소하거나 공유 오브젝트를 삭제할 때는 주의하십시오. 설치된 Snowflake Native App 버전에서 여전히 이러한 오브젝트에 액세스해야 하는 경우 Snowflake Native App 이 불안정해지거나 실패할 수 있습니다.

공유 오브젝트에 대한 권한 취소 및 삭제하기

애플리케이션 패키지에서 공유 오브젝트에 대한 권한을 취소하거나 공유 오브젝트를 삭제할 때는 주의하십시오. 설치된 Snowflake Native App 버전에서 여전히 이러한 오브젝트에 액세스해야 하는 경우 Snowflake Native App 이 불안정해지거나 실패할 수 있습니다.