카테고리:

컨텍스트 함수

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

  • 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