앱에서 소유자 권한 및 제한된 호출자 권한 사용하기

이 항목에서는 소유자의 권한과 제한된 호출자의 권한을 사용하도록 앱을 구성하는 방법에 대해 설명합니다.

앱에서 소유자 권한 및 제한된 호출자 권한 정보

Snowflake Native App 내에서 실행 파일은 소유자 권한 또는 제한된 호출자 권한으로 실행됩니다. Snowflake Native App Framework 의 컨텍스트에서 지원되는 실행 파일 유형은 다음과 같습니다.

  • 앱이 소유한 저장 프로시저

  • 컨테이너가 있는 앱에서 사용 가능한 서비스

소유자의 권리:

소유자의 권한을 사용하는 실행 파일은 실행 파일의 소유자에게 부여된 권한으로 실행됩니다. 기본적으로 앱 내의 실행 파일은 소유자의 권한을 사용합니다. 앱에서 실행 파일의 소유자는 앱 자체입니다.

예를 들어 CREATE PROCEDURE 명령은 기본적으로 소유자의 권한을 사용하는 저장 프로시저를 만듭니다. 컨슈머는 애플리케이션 역할을 사용하여 액세스 권한이 부여된 경우 저장 프로시저를 호출할 수 있습니다. 앱에 작업을 수행할 수 있는 권한이 있는 경우 저장 프로시저가 해당 작업을 수행할 수 있습니다.

소유자의 권리에 대한 자세한 내용은 호출자 권한 및 소유자 권한 저장 프로시저 이해하기 섹션을 참조하십시오.

호출자의 권리:

호출자의 권한을 사용하는 실행 파일은 호출자에게 부여된 권한으로 실행됩니다. 그러나 보안상의 이유로 Snowflake Native App Framework 에서는 호출자 권한이 있는 실행 파일을 지원하지 않습니다.

제한된 호출자의 권한:

호출자 권한 제한은 실행 파일을 호출자의 권한으로 실행할 수 있도록 허용하지만, 실행 파일이 어떤 호출자의 권한으로 실행되는지 제한합니다. 호출자 권한이 제한된 경우, 앱이 소유한 실행 파일은 컨슈머 계정의 관리자가 GRANT CALLER 명령을 사용하여 명시적으로 허용하지 않는 한 특정 권한으로 실행할 수 없습니다.

간결성을 위해 제한된 호출자 권한으로 실행되는 실행 파일을 RCR 실행 파일이라고도 합니다.

제한된 호출자의 권한에 대한 일반적인 정보는 제한된 호출자의 권한 섹션을 참조하십시오.

앱의 액세스 요구 사항 결정하기

Snowflake Native App Framework 를 통해 공급자는 앱에서 관리하는 데이터 및 실행 파일에 대한 액세스를 유연하게 구성할 수 있습니다. 다음 표에는 앱의 액세스 요구 사항에 따라 어떤 메커니즘을 사용할지에 대한 가이드라인이 나와 있습니다.

필수 액세스 권한

액세스하는 방법

앱이 소유한 데이터 또는 함수

기본적으로 소유자 권한을 사용합니다. 공급자는 앱이 소유한 오브젝트를 생성하거나 액세스하기 위해 컨슈머에게 액세스를 요청할 필요가 없습니다.

컨슈머 계정의 특정 테이블, 뷰 또는 함수

컨슈머에게 추천 요청하기

다른 사용자 또는 역할이 소유한 테이블, 뷰, 함수 및 행 정책.

제한된 호출자 권한을 사용하여 컨슈머가 이러한 오브젝트에 액세스할 수 있도록 허용합니다.

컨슈머 소유 데이터베이스에 대한 폭넓은 접근성

데이터베이스 역할 부여 사용

컨슈머 및 공급자 데이터의 조합에 액세스하는 쿼리

참조 및 소유자 권한 함께 사용

계정 수준 오브젝트

특정 오브젝트에 대한 권한을 부여하는 GRANT 명령이 포함된 사용자 지정 스크립트를 제공하십시오.

매니페스트에 restricted_callers_rights 속성 추가하기

공급자는 앱에 RCR 실행 파일을 포함할 경우 다음 예시와 같이 restricted_callers_rights 를 매니페스트 파일에 추가하는 것이 좋습니다.

restricted_callers_rights:
  enabled: true
  description: This app includes stored procedure that uses restricted caller's rights.
Copy

restricted_callers_rights 는 필요하지 않지만 이 코드가 존재하고 enabledtrue, 로 설정된 경우 Snowsight 에서는 앱 목록에 Restricted caller’s rights 라는 섹션이 포함됩니다.

제한된 호출자의 권한을 사용하도록 프로시저 또는 서비스 구성하기

제한된 호출자 권한을 사용하는 저장 프로시저를 만들려면 다음 예제와 같이 EXECUTE AS RESTRICTED CALLER 절을 사용합니다.

CREATE OR REPLACE PROCEDURE CORE.HELLO()
RETURNS STRING
LANGUAGE SQL
EXECUTE AS RESTRICTED CALLER
AS
BEGIN
  RETURN 'Hello Snowflake!';
END;
Copy

자세한 내용은 CREATE PROCEDURE 섹션을 참조하십시오.

앱에서 제한된 호출자 권한 서비스 사용하기

제한된 호출자 권한을 사용하도록 서비스를 구성하는 방법에 대한 자세한 내용은 호출자 권한을 사용하여 컨테이너 내부에서 Snowflake에 연결하기 섹션을 참조하십시오.

앱에서 Snowpark Container Services 서비스는 앱의 권한(소유자 권한)으로 실행하거나 서비스 호출자의 권한(제한된 호출자 권한)으로 실행할 수 있습니다. 그러나 서비스 소유자 역할은 서비스 사용자 역할이 아닌 앱입니다. 호출자 권한을 부여할 때 컨슈머는 다음 예시와 같이 TO APPLICATION 절을 사용하여 앱을 지정합니다.

GRANT CALLER USAGE ON DATABASE consumer_db TO APPLICATION hello_snowflake_app;
Copy

이 예에서는 consumer_db 데이터베이스에 액세스하는 호출자의 역할을 사용하여 제한된 호출자 권한으로 서비스를 실행할 수 있습니다.

앱에서 제한된 호출자의 권한에 대한 제한 사항

앱 내에서 제한된 호출자 권한을 사용할 때는 다음과 같은 제한이 적용됩니다.

제한된 호출자의 권리에 대한 일반적인 제한 사항

실행 파일에 대해 제한되는 호출자 권한에 대한 일반적인 제한 사항은 호출자 권한이 제한된 실행 파일의 제한 사항 섹션을 참조하십시오. 여기에 나열된 제한 사항은 앱에도 적용됩니다.

앱에 대한 추가 제한 사항

앱에는 제한된 호출자의 권한에 대한 일반적인 제한 외에도 다음과 같은 제한이 있습니다.

  • 앱의 실행 파일에는 무제한 호출자 권한이 지원되지 않습니다.

  • 다음 명령을 실행할 수 없습니다.

    • SHOW ROLES

    • SHOW USERS

    • SHOW [CALLER] GRANTS

    • SHOW AVAILABLE LISTINGS

  • 다음 함수를 실행할 수 없습니다.

    • ALL_USER_NAMES

    • GET_USERS_FOR_COLLABORATION

    • CURRENT_IP_ADDRESS

    • CURRENT_AVAILABLE_ROLES

    • CURRENT_SECONDARY_ROLES

    • SYSTEM$ALLOWLIST (또는 사용되지 않는 SYSTEM$WHITELIST)

  • 영구 참조 함수는 지원되지 않습니다.

  • 스테이지의 오브젝트에 대한 상대 경로는 지원되지 않습니다.

  • RCR 실행 파일은 앱의 내부 오브젝트에 액세스할 수 없습니다.

  • 소유자 권한이 있는 실행 파일은 제한되지 않은 호출자 권한을 사용하는 다른 실행 파일을 호출할 수 없습니다.

    소유자 권한이 애플리케이션에 있는 실행 파일은 RCR 실행 파일을 호출할 수 있지만 RCR 실행 파일도 앱이 소유하고 있어야 합니다. 예를 들어, 소유자 권한이 있는 앱의 저장 프로시저는 호출자 권한이 제한된 컨슈머의 저장 프로시저를 호출할 수 없습니다.

앱의 제한된 호출자 권한 프로시저에서 청구 함수 호출하기

SYSTEM$CREATE_BILLING_EVENT 또는 SYSTEM$CREATE_BILLING_EVENTS 와 같은 청구 함수는 RCR 실행 파일에서 호출할 수 없습니다. 앱의 RCR 실행 파일에서 이러한 함수를 호출하려면 소유자의 권한 프로시저에 이러한 함수를 포함하고 제한된 호출자의 권한 프로시저에서 프로시저를 호출합니다.

지적 재산권 보호 및 제한된 호출자의 권리

소유자 권한 저장 프로시저가 포함된 앱은 앱의 내부 구현에 대한 정보를 삭제합니다. 자세한 내용은 공급자 지식 재산 보호하기 섹션을 참조하십시오.

호출자 권한이 제한된 저장 프로시저는 앱에 대한 내부 정보도 삭제합니다. 특히 많은 정보가 삭제되는 다음 명령, 뷰 및 함수의 경우 더욱 그렇습니다.

그러나 소유자 권한이 있는 저장 프로시저와 달리 제한된 호출자 권한을 사용하는 프로시저는 쿼리 기록 및 쿼리 프로필에서 정보를 삭제하지 않습니다.

제한된 호출자 권한을 사용하는 앱 개발하기

일반적으로 MANAGE CALLER GRANTS 권한이 부여된 역할만 실행 파일에 호출자 권한을 부여할 수 있습니다. 그러나 Snowflake Native App 의 개발 수명 주기 동안 공급자는 앱을 자주 생성하고 제거해야 할 수 있습니다. Snowflake Native App Framework 는 개발 모드의 앱 에 대한 호출자 권한 부여를 생성하는 메커니즘을 제공합니다.

공급자는 MANAGE CALLER GRANTS 없이 역할을 사용하여 앱에 호출자 권한을 부여할 수 있습니다. 그러나 이를 위해서는 다음 사항이 모두 필요합니다.

  • 앱은 개발 모드 에서 만들어야 합니다.

  • 현재 역할은 역할 계층 구조에서 앱 소유자 역할이 있습니다.

  • 앱 소유자 역할에는 부여되는 호출자 권한의 상위 세트가 있습니다.

    참고

    ALL CALLER PRIVILEGES 권한은 모든 호출자 권한 세트의 상위 세트입니다.

일반적으로 특정 컨테이너 아래의 특정 유형의 현재 및 미래의 모든 오브젝트를 포괄하는 INHERITED CALLER 권한 부여로는 상위 세트 요구 사항을 충족할 수 없습니다. 자세한 내용은 GRANT CALLER 섹션을 참조하십시오.

이 요구 사항을 충족하려면 부여되는 호출자 권한이 앱 소유자 역할에 부여된 호출자 권한에 명시적으로 포함되어야 합니다.

앱 개발자가 개발자 모드에서 앱에 호출자 권한을 부여할 수 있도록 지원하기

앱 소유자 역할이 개발 모드에서 앱에 특정 호출자 권한 세트를 허용하려면 ACCOUNTADMIN 역할 또는 MANAGE CALLER GRANTS 권한이 부여된 역할이 먼저 앱 소유자 역할에 해당 권한 세트를 포함하는 호출자 권한을 부여해야 합니다.

다음 예에서는 계정의 데이터베이스에 요구 사항을 충족하는 호출자 권한을 부여하는 방법을 보여줍니다.

GRANT ALL INHERITED CALLER PRIVILEGES
  ON ALL DATABASES IN ACCOUNT
  TO ROLE app_dev_role;
Copy

이 명령은 모든 데이터베이스에 대한 모든 호출자 권한을 app_dev_role 역할에 부여합니다.

참고

이 명령은 호출자 권한만 부여합니다. 앱 개발자가 이미 액세스 권한이 없는 오브젝트에 액세스하는 것을 허용하지 않습니다.

개발 모드의 앱에 대한 추가 보안 조치

앱 개발자에게 MANAGE CALLER GRANTS 권한 없이 소유자 역할을 허용하면 앱 개발 프로세스가 간소화되지만 잠재적인 보안 위험이 발생할 수 있습니다. 이러한 위험을 최소화하기 위해 Snowflake는 앱 소유자가 앱에 대한 요구 사항인 호출자 권한을 계속 보유하고 있는지 확인합니다. 앱 소유자가 요구 사항인 호출자 권한을 잃으면 앱도 해당 권한을 잃게 됩니다.