카테고리:

컨텍스트 함수

POLICY_CONTEXT

하나 이상의 컨텍스트 함수 값에 따라 쿼리 결과를 시뮬레이션하여 정책이 쿼리 결과에 어떤 영향을 미치는지 확인할 수 있습니다. 컨텍스트 함수는 쿼리의 현재 컨텍스트(예: 쿼리를 실행하는 사용자 또는 쿼리가 실행되는 계정)를 기반으로 값을 반환합니다. 정책 본문은 종종 컨텍스트 함수를 사용하여 정책에서 어떤 값을 반환할지 결정합니다.

이 함수는 다음 정책을 평가하여 쿼리 결과를 결정합니다.

구문

EXECUTE USING
POLICY_CONTEXT( <arg_1> => '<string_literal>' [ , <arg_2> => '<string_literal>' , ... , <arg_n> => '<string_literal>' ] )
AS
SELECT <query>
Copy

인자

arg_1 => 'string_literal'

컨텍스트 함수와 해당 값을 문자열로 지정합니다.

필수 항목입니다. 최소한 하나의 함수와 해당 값을 지정해야 합니다.

Snowflake는 다음 컨텍스트 함수와 해당 값을 인자로 지원합니다.

문자열 값으로 사용할 형식을 결정하려면 함수를 사용하여 쿼리를 실행합니다. 예:

SELECT CURRENT_USER();

+----------------+
| CURRENT_USER() |
|----------------|
| JSMITH         |
+----------------+
Copy

문자열 값은 'JSMITH' 여야 합니다.

CURRENT_AVAILABLE_ROLES 및 여러 역할 값(예: ROLE1ROLE2)을 지정하는 경우 다음과 같이 역할 목록을 대괄호로 묶습니다.

['ROLE1', 'ROLE2']

arg_2 => 'string_literal' , ... , arg_n => 'string_literal'

컨텍스트 함수로 이루어진, 쉼표로 구분된 목록과 해당 값을 문자열로 지정합니다.

선택 사항입니다.

query

하나 이상의 테이블이나 뷰를 쿼리하는 SQL 식을 지정합니다.

필수 항목입니다.

사용법 노트

  • 이 함수에는 다음이 필요합니다.

    • 지원되는 컨텍스트 함수 및 해당 값을 지정하는 하나 이상의 인자.

    • 테이블이 정책에 의해 보호되는 경우, 지정된 사용자 또는 역할에 다음 권한이 부여되어야 합니다.

      • 테이블이나 뷰에 대한 OWNERSHIP,

      • 계정 수준 또는 정책 자체에서 정책에 대한 APPLY 권한:

        • ACCOUNT에 대한 APPLY MASKING POLICY 또는 MASKING POLICY policy_name 에 대한 APPLY

        • ACCOUNT에 대한 APPLY ROW ACCESS POLICY 또는 ROW ACCESS POLICY policy_name 에 대한 APPLY

        • ACCOUNT에 대한 APPLY AGGREGATION POLICY 또는 AGGREGATION POLICY policy_name 에 대한 APPLY

        • ACCOUNT에 대한 APPLY PROJECTION POLICY 또는 PROJECTION POLICY policy_name 에 대한 APPLY

  • Snowflake는 다음 조건 중 하나라도 해당되면 오류 메시지를 반환합니다.

    • 하나 이상의 지원되지 않는 함수를 인자로 사용합니다. Snowflake는 인자 섹션에 나열된 함수만 지원합니다.

    • 존재하지 않는 값(예: 계정, 사용자 또는 역할 없음)에 문자열을 사용하는 등 함수 문자열 값을 적절하게 지정하지 않습니다.

    • SELECT query 식이 테이블이나 뷰를 제대로 쿼리하지 않습니다(예: 테이블이나 뷰를 전혀 지정하지 않음).

    • 특정 데이터 공유 사용 사례(다음 글머리 기호 참조).

  • 데이터 공유:

    • 데이터 공유 컨슈머는 이 함수를 사용하여, 데이터 공유 공급자가 제공한 테이블이나 뷰에 대한 쿼리 결과를 시뮬레이션할 수 없습니다.

      또한, 보안 Secure Data Sharing 을 통해 사용할 수 있는 테이블 또는 뷰, 그리고 데이터 공유 공급자 계정(즉, 자체 테이블 또는 뷰)과 연결되지 않은 컨슈머 계정의 다른 테이블 또는 뷰가 컨슈머 query 식에 포함된 경우 Snowflake는 오류 메시지를 반환합니다.

    • 데이터 공유 공급자 계정은 데이터 공유 컨슈머 계정이 공유를 통해 제공되는 테이블이나 뷰를 보는 방법을 시뮬레이션할 수 있습니다.

      이를 위해 데이터 공유 공급자는 컨슈머 계정 이름을 인자로 지정합니다. 예:

      execute using policy_context(current_account => '<consumer_account_name>') ... ;
      
      Copy
  • 결과는 다음에 따라 달라집니다.

    • 열에 설정된 마스킹 정책 또는 프로젝션 정책(있는 경우).

    • 테이블 또는 뷰에 설정된 행 액세스 정책 또는 집계 정책(있는 경우).

    • 정책 정의.

    • query 식.

    • 역할에 부여된 권한.

    • 사용자에게 부여된 역할(역할 계층 구조 포함).

    • 이 함수의 인자.

    중요

    이 함수의 결과가 예상과 다른 경우:

    • 내부 정책 관리자에게 문의하여 정책으로 보호되는 테이블, 뷰, 열을 확인하고 해당 정책의 본문 정의에 대해 더 잘 이해할 수 있습니다. 이 관리자는 POLICY_ADMIN, MASKING_ADMIN 또는 RAP_ADMIN 같은 사용자 지정 역할을 가질 수 있습니다.

    • 다음을 다시 확인하십시오.

      • 함수 문자열 값.

      • SELECT query 식.

      • 역할에 부여된 권한(예: 테이블 또는 뷰에 대한 SELECT, 상위 데이터베이스 및 스키마에 대한 USAGE) 및 해당 권한 상속.

      • 역할 계층 구조, 특히 CURRENT_AVAILABLE_ROLES 함수와 해당 값을 이 함수의 인자로 지정하는 경우.

    필요에 따라 이 함수를 사용하여 SQL 문을 업데이트하고 다시 시도하십시오.

empl_info 테이블을 쿼리하는 PUBLIC 시스템 역할의 효과를 시뮬레이션합니다.

execute using policy_context(current_role => 'PUBLIC') as select * from empl_info;
Copy