프로젝션 정책¶
이 항목에서는 프로젝션 정책을 사용하여 SQL 쿼리 결과 출력에서 열 프로젝션을 허용하거나 방지하는 방법에 대한 정보를 제공합니다.
개요¶
프로젝션 정책은 SQL 쿼리 결과의 출력에 열을 프로젝션할 수 있는지 여부를 정의하는 일급 스키마 수준 오브젝트입니다. 프로젝션 정책이 할당된 열을 프로젝션이 제한되어 있다 라고 합니다.
프로젝션 정책을 사용하면 데이터를 안전하게 공유 할 때 오브젝트의 식별자 열(예: 이름, 전화번호)을 제한할 수 있습니다. 예를 들어, 솔루션 파트너로 일하면서 통합 솔루션 개발 전에 공통된 고객 세트를 식별하려는 두 회사를 생각해 보십시오. 공급자는 컨슈머가 중요한 정보를 식별하는 데 필요한 공유의 식별자 열에 프로젝션 정책을 할당할 수 있습니다. 컨슈머는 공유 데이터를 사용하여 솔루션에 필요한 이전에 합의된 열을 기반으로 일치 항목 찾기를 수행할 수 있지만 해당 열에서 값을 반환할 수는 없습니다.
이 예에서 프로젝션 정책을 사용하면 다음과 같은 이점이 있습니다.
컨슈머는 해당 값을 볼 수 없어도 특정 값을 기반으로 레코드를 일치시킬 수 있습니다.
민감한 공급자 정보는 SQL 쿼리 결과에 출력할 수 없습니다. 자세한 내용은 이 항목의 고려 사항 섹션을 참조하십시오.
프로젝션 정책을 생성한 후 정책 관리자는 프로젝션 정책을 열에 할당할 수 있습니다. 열에는 주어진 시간에 하나의 프로젝션 정책만 할당될 수 있습니다. 사용자는 활성 역할이 열이 프로젝션되도록 허용하는 프로젝션 정책 조건과 일치하는 경우에만 열을 프로젝션할 수 있습니다.
프로젝션 제한 열은 마스킹 정책으로 보호할 수도 있고 프로젝션 제한 열이 포함된 테이블은 행 액세스 정책으로 보호할 수도 있습니다. 자세한 내용은 이 항목의 마스킹 정책 및 행 액세스 정책 섹션을 참조하십시오.
열 사용¶
Snowflake는 열 사용을 추적합니다. 뷰 정의, (이 항목의) UDF, 공통 테이블 식 등 열에 대한 간접 참조는 프로젝션 정책이 열에 설정된 경우 열 프로젝션에 영향을 줍니다.
열에 프로젝션 정책이 설정되어 있고 열을 프로젝션할 수 없는 경우 열은
쿼리 결과의 출력에는 포함되지 않습니다.
다른 테이블에 삽입할 수 없습니다.
외부 함수 또는 저장 프로시저에 대한 인자가 될 수 없습니다.
제한 사항¶
- UDFs:
사용자 정의 함수(UDF)에 관한 제한 사항은 이 항목의 사용자 정의 함수(UDF) 섹션을 참조하십시오.
- 정책:
프로젝션 정책은 다음에 적용할 수 없습니다.
태그. 해당 태그는 테이블이나 열에 할당할 수 없습니다(즉, “태그 기반 프로젝션 정책”).
가상 열 또는 외부 테이블의 VALUE 열.
이 문제를 해결하려면 뷰를 만들고 프로젝션해서는 안 되는 각 열에 프로젝션 정책을 할당하십시오.
PIVOT 구문의
value_column
. 관련된 자세한 내용은 이 항목의 UNPIVOT 섹션을 참조하십시오.
프로젝션 정책
body
는 마스킹 정책으로 보호되는 열이나 행 액세스 정책으로 보호되는 테이블을 참조할 수 없습니다. 추가적인 세부 정보는 이 항목의 마스킹 정책 및 행 액세스 정책 섹션을 참조하십시오.
고려 사항¶
사용 사례에서 열 값을 분석가 또는 유사한 역할에 직접 노출하지 않고 민감한 열을 쿼리해야 하는 경우 프로젝션 정책을 사용하십시오. 프로젝션 제한 열 내의 열 값은 마스크되거나 토큰화된 값보다 더 유연하게 분석할 수 있습니다. 그러나 열에 프로젝션 정책을 설정하기 전에 다음 사항을 고려하십시오.
프로젝션 정책은 개인의 타겟팅을 방해하지 않습니다.
예를 들어 사용자는 열이 프로젝션 제약을 받는 경우에도
name
열이 특정 개인에 해당하는 행을 필터링할 수 있습니다. 그러나 사용자는 SELECT 문을 실행하여 테이블에 있는 개인의 이름을 볼 수 없습니다.프로젝션 제한 열이 보호된 테이블의 데이터를 보호되지 않은 테이블의 데이터과 결합하는 쿼리의 조인 키인 경우 사용자가 보호되지 않은 테이블의 열에서 값을 프로젝션하지 못하게 하는 것은 없습니다. 결과적으로, 보호되지 않은 테이블의 값이 보호된 열의 값과 일치하는 경우 사용자는 보호되지 않은 테이블에서 해당 값을 프로젝션하여 얻을 수 있습니다.
예를 들어
t_protected
테이블의email
열에 프로젝션 정책이 할당되었다고 가정해 보겠습니다. 그래도 사용자는 다음을 실행하여t_protected.email
열의 값을 확인할 수 있습니다.SELECT t_unprotected.email FROM t_unprotected JOIN t_protected ON t_unprotected.email = t_protected.email;
프로젝션 제약 조건은 악의적인 행위자가 의도적인 쿼리를 사용하여 프로젝션으로 제한되는 열에서 잠재적으로 민감한 데이터를 얻을 수 없으리라 보장하지 않습니다. 예측 정책은 기존 수준의 신뢰를 가진 파트너 및 고객과 함께 사용하는 데 가장 적합합니다. 또한 공급자는 데이터의 오용 가능성에 대해 경계해야 합니다(예: 목록에 대한 액세스 기록 검토).
프로젝션 정책 만들기¶
프로젝션 정책에는 열 프로젝션 여부를 결정하기 위해 내부 PROJECTION_CONSTRAINT 함수를 호출하는 body
가 포함됩니다.
CREATE OR REPLACE PROJECTION POLICY <name> AS () RETURNS PROJECTION_CONSTRAINT -> <body>여기서
name
은 정책의 이름을 지정합니다.
AS () RETURNS PROJECTION_CONSTRAINT
는 정책의 서명 및 반환 유형입니다. 서명은 어떠한 인자도 허용하지 않으며 반환 유형은 내부 데이터 타입인 PROJECTION_CONSTRAINT입니다. 모든 프로젝션 정책은 동일한 서명과 반환 유형을 갖습니다.
body
는 열을 프로젝션할지 여부를 결정하는 SQL 식입니다. 이 식은 내부 PROJECTION_CONSTRAINT 함수를 호출하여 열 프로젝션을 허용하거나 방지합니다.
PROJECTION_CONSTRAINT(ALLOW => true)
는 열 프로젝션을 허용합니다.
PROJECTION_CONSTRAINT(ALLOW => false)
는 열 프로젝션을 허용하지 않습니다.
정책 예시¶
가장 간단한 프로젝션 정책은 PROJECTION_CONSTRAINT 함수를 직접 호출합니다.
- 열 프로젝션 허용
CREATE OR REPLACE PROJECTION POLICY mypolicy AS () RETURNS PROJECTION_CONSTRAINT -> PROJECTION_CONSTRAINT(ALLOW => true)
- 열 프로젝션 방지
CREATE OR REPLACE PROJECTION POLICY mypolicy AS () RETURNS PROJECTION_CONSTRAINT -> PROJECTION_CONSTRAINT(ALLOW => false)
PROJECTION_CONSTRAINT 함수를 호출하기 위해 더 복잡한 SQL 식을 작성할 수 있습니다. 이 식은 조건식 함수 및 컨텍스트 함수 를 사용하여 특정 역할을 가진 특정 사용자가 열을 프로젝션하도록 허용하고 다른 모든 사용자가 열을 프로젝션하는 것을 방지하는 논리를 도입할 수 있습니다.
예를 들어, CASE 식을 사용하면 analyst
사용자 지정 역할이 있는 사용자만 열을 프로젝션할 수 있습니다.
CREATE OR REPLACE PROJECTION POLICY mypolicy AS () RETURNS PROJECTION_CONSTRAINT -> CASE WHEN CURRENT_ROLE() = 'ANALYST' THEN PROJECTION_CONSTRAINT(ALLOW => true) ELSE PROJECTION_CONSTRAINT(ALLOW => false) END;
데이터 공유 사용 사례의 경우 공급자는 CURRENT_ACCOUNT 컨텍스트 함수를 사용하여 모든 컨슈머 계정에 대한 열 프로젝션을 제한하거나 INVOKER_SHARE 컨텍스트 함수를 사용하여 특정 공유의 열 프로젝션을 선택적으로 제한하는 프로젝션 정책을 작성할 수 있습니다. 예:
- 모든 컨슈머 계정 제한하기
이 예에서
provider.account
는 계정 이름 형식의 계정 식별자 입니다.CREATE OR REPLACE PROJECTION POLICY restrict_consumer_accounts AS () RETURNS PROJECTION_CONSTRAINT -> CASE WHEN CURRENT_ACCOUNT() = 'provider.account' THEN PROJECTION_CONSTRAINT(ALLOW => true) ELSE PROJECTION_CONSTRAINT(ALLOW => false) END;
- 특정 공유로 제한하기
보안 뷰의 열에 프로젝션 정책이 설정된 데이터 공유 공급자 계정을 생각해 보십시오. 서로 다른 두 데이터 공유 컨슈머를 지원하기 위해 보안 뷰에 액세스할 수 있는 서로 다른 두 공유(
SHARE1
및SHARE2
)가 있습니다.데이터 공유 컨슈머 계정의 사용자가 어느 한 공유를 통해 열을 프로젝션하려고 하면 열을 프로젝션할 수 있으며, 그렇지 않으면 열을 프로젝션할 수 없습니다.
CREATE OR REPLACE PROJECTION POLICY projection_share AS () RETURNS PROJECTION_CONSTRAINT -> CASE WHEN INVOKER_SHARE() IN ('SHARE1', 'SHARE2') THEN PROJECTION_CONSTRAINT(ALLOW => true) ELSE PROJECTION_CONSTRAINT(ALLOW => false) END;
프로젝션 정책 할당하기¶
테이블 열에는 ALTER TABLE … ALTER COLUMN 명령을 사용하고 뷰 열에는 ALTER VIEW 명령을 사용하여 프로젝션 정책을 적용합니다. 각 열은 하나의 프로젝션 정책만 지원합니다.
ALTER { TABLE | VIEW } <name> { ALTER | MODIFY } COLUMN <col1_name> SET PROJECTION POLICY <policy_name> [ FORCE ] [ , <col2_name> SET PROJECTION POLICY <policy_name> [ FORCE ] ... ]
여기서
name
은 테이블 또는 뷰의 이름을 지정합니다.col1_name
은 테이블 또는 뷰의 열 이름을 지정합니다.col2_name
은 테이블이나 뷰의 추가 열 이름을 지정합니다.policy_name
은 열에 설정된 프로젝션 정책의 이름을 지정합니다.FORCE
는 명령이 이미 프로젝션 정책이 할당된 열에 프로젝션 정책을 할당할 수 있도록 하는 선택적 매개 변수입니다. 새 프로젝션 정책은 기존 정책을 원자적으로 대체합니다.
예를 들어 테이블의 account_number
열에 프로젝션 정책 proj_policy_acctnumber
를 설정하려면 다음을 수행하십시오.
ALTER TABLE finance.accounting.customers MODIFY COLUMN account_number SET PROJECTION POLICY proj_policy_acctnumber;
테이블이나 뷰가 생성될 때 CREATE TABLE 및 CREATE VIEW 명령의 WITH 절을 사용하여 열에 프로젝션 정책을 할당할 수도 있습니다. 예를 들어, 새 테이블의 account_number
열에 정책 my_proj_policy
를 할당하려면 다음을 실행하십시오.
CREATE TABLE t1 (account_number NUMBER WITH PROJECTION POLICY my_proj_policy);
프로젝션 정책 바꾸기¶
프로젝션 정책을 바꿀 때 권장하는 방법은 FORCE
매개 변수를 사용하여 기존 프로젝션 정책을 분리하고 단일 명령으로 새 정책을 할당하는 것입니다. 이를 통해 이전 정책을 원자적으로 바꾸어 보호에 공백이 생기지 않도록 할 수 있습니다.
예를 들어 이미 프로젝션이 제한된 열에 새 프로젝션 정책을 할당하려면 다음을 수행하십시오.
ALTER TABLE finance.accounting.customers
MODIFY COLUMN account_number
SET PROJECTION POLICY proj_policy2 FORCE;
한 문(… UNSET PROJECTION POLICY)의 열에서 프로젝션 정책을 분리한 다음, 다른 문(… SET PROJECTION POLICY <name>)의 열에 대해 새 정책을 설정할 수도 있습니다. 이 방법을 선택하면 한 정책을 분리하고 다른 정책을 할당하는 사이에 프로젝션 정책으로 열이 보호되지 않습니다. 이 시간 동안 쿼리는 잠재적으로 민감한 데이터에 액세스할 수 있습니다.
프로젝션 정책 분리하기¶
테이블 또는 뷰의 열에서 프로젝션 정책을 분리하려면 ALTER TABLE 또는 ALTER VIEW 명령의 UNSET PROJECTION POLICY 절을 사용하십시오. 열에 둘 이상의 프로젝션 정책을 연결할 수 없으므로 프로젝션 정책의 이름은 필요하지 않습니다.
ALTER { TABLE | VIEW } <name> { ALTER | MODIFY } COLUMN <col1_name> UNSET PROJECTION POLICY [ , <col2_name> UNSET PROJECTION POLICY ... ]
여기서
name
은 테이블 또는 뷰의 이름을 지정합니다.col1_name
은 테이블 또는 뷰의 열 이름을 지정합니다.col2_name
은 테이블이나 뷰의 추가 열 이름을 지정합니다.
예를 들어 account_number
열에서 프로젝션 정책을 제거하는 방법은 다음과 같습니다.
ALTER TABLE finance.accounting.customers MODIFY COLUMN account_number UNSET PROJECTION POLICY;
SQL로 프로젝션 정책 모니터링하기¶
프로젝션 정책 사용을 모니터링하는 방법을 결정하는 두 가지 일반적인 접근 방식을 생각해보면 도움이 될 수 있습니다.
프로젝션 정책 검색하기¶
공유 SNOWFLAKE 데이터베이스의 Account Usage 스키마에서 PROJECTION_POLICIES 뷰를 사용할 수 있습니다. 이 뷰는 Snowflake 계정의 모든 프로젝션 정책의 카탈로그 입니다. 예:
SELECT * FROM SNOWFLAKE.ACCOUNT_USAGE.PROJECTION_POLICIES ORDER BY POLICY_NAME;
예측 정책 참조 식별하기¶
POLICY_REFERENCES Information Schema 테이블 함수는 프로젝션 정책 참조를 식별할 수 있습니다. 다음과 같이 두 가지 다른 구문 옵션이 있습니다.
지정된 프로젝션 정책이 열에 설정된 각 오브젝트(즉, 테이블 또는 뷰)의 행을 반환합니다.
USE DATABASE my_db; SELECT policy_name, policy_kind, ref_entity_name, ref_entity_domain, ref_column_name, ref_arg_column_names, policy_status FROM TABLE(information_schema.policy_references(policy_name => 'my_db.my_schema.projpolicy'));
my_table
이라는 테이블에 할당된 각 정책에 대한 행을 반환합니다.USE DATABASE my_db; USE SCHEMA information_schema; SELECT policy_name, policy_kind, ref_entity_name, ref_entity_domain, ref_column_name, ref_arg_column_names, policy_status FROM TABLE(information_schema.policy_references(ref_entity_name => 'my_db.my_schema.my_table', ref_entity_domain => 'table'));
확장된 예¶
프로젝션 정책을 생성하고 열에 프로젝션 정책을 할당하는 작업은 마스킹 및 행 액세스 정책 등 다른 정책을 생성하고 할당하는 것과 동일한 일반 절차를 따릅니다.
중앙 집중식 관리 접근 방식의 경우 정책을 관리하려면 사용자 지정 역할(예:
proj_policy_admin
)을 만드십시오.이 역할에 프로젝션 정책을 만들고 할당할 수 있는 권한을 부여합니다.
프로젝션 정책을 만듭니다.
열에 프로젝션 정책을 할당합니다.
이 일반 절차에 따라 다음 단계를 완료하여 열에 프로젝션 정책을 할당합니다.
프로젝션 정책을 관리하기 위한 사용자 지정 역할을 만듭니다.
USE ROLE useradmin; CREATE ROLE proj_policy_admin;
스키마에 프로젝션 정책을 생성하고 Snowflake 계정의 테이블 또는 뷰 열에 프로젝션 정책을 할당할 수 있는 권한을
proj_policy_admin
사용자 지정 역할에 부여합니다.이 단계에서는 프로젝션 정책이
privacy.projpolicies
라는 데이터베이스와 스키마에 저장되고 이 데이터베이스와 스키마가 이미 존재한다고 가정합니다.GRANT USAGE ON DATABASE privacy TO ROLE proj_policy_admin; GRANT USAGE ON SCHEMA privacy.projpolicies TO ROLE proj_policy_admin; GRANT CREATE PROJECTION POLICY ON SCHEMA privacy.projpolicies TO ROLE proj_policy_admin; GRANT APPLY PROJECTION POLICY ON ACCOUNT TO ROLE proj_policy_admin;
자세한 내용은 이 항목의 권한과 명령 섹션을 참조하십시오.
열 프로젝션을 방지하기 위한 프로젝션 정책을 만듭니다.
USE ROLE proj_policy_admin; USE SCHEMA privacy.projpolicies; CREATE OR REPLACE PROJECTION POLICY proj_policy_false AS () RETURNS PROJECTION_CONSTRAINT -> PROJECTION_CONSTRAINT(ALLOW => false);
테이블 열에 프로젝션 정책을 할당합니다.
ALTER TABLE customers MODIFY COLUMN active SET PROJECTION POLICY privacy.projpolicies.proj_policy_false;
Snowflake 기능을 포함한 프로젝션 정책¶
다음 하위 섹션에서는 프로젝션 정책이 다양한 Snowflake 기능 및 서비스와 상호 작용하는 방식을 간략하게 요약합니다.
마스킹 정책 및 행 액세스 정책¶
이 섹션에서는 프로젝션 정책이 마스킹 정책 및 행 액세스 정책 과 상호 작용하는 방식을 설명합니다.
- 여러 가지 정책:
열에는 마스킹 정책과 프로젝션 정책이 동시에 있을 수 있으며, 이 열이 포함된 테이블을 행 액세스 정책으로 보호할 수 있습니다. 세 가지 정책이 모두 존재하는 경우 Snowflake는 테이블과 정책을 다음과 같이 처리합니다.
행 액세스 정책에 따라 행 필터를 적용합니다.
쿼리가 프로젝션 정책에 의해 제한되는 열을 프로젝션하려고 시도하는지 확인하고, 그럴 경우 쿼리를 거부합니다.
마스킹 정책에 따라 열 마스크를 적용합니다.
마스킹 정책으로 보호되는 열은 프로젝션이 제한될 수도 있습니다. 예를 들어, 계정 번호가 포함된 열에 설정된 마스킹 정책에는
finance_admin
사용자 지정 역할이 있는 사용자가 계정 번호를 볼 수 있도록 허용하는 조건과 계정 번호를 다른 모든 역할에 대한 해시로 바꾸는 또 다른 조건이 있을 수 있습니다.프로젝션 정책은
analyst
사용자 지정 역할이 있는 사용자가 열을 프로젝션할 수 없도록 열을 추가로 제한할 수 있습니다.analyst
사용자 지정 역할이 있는 사용자는 해시를 그룹화하거나 이러한 해시에 조인하여 열을 계속 분석할 수 있습니다.Snowflake에서는 정책 관리자가 내부 규정 준수 및 규제 책임자와 협력하여 프로젝션을 제한해야 하는 열을 결정할 것을 권장합니다.
- 정책 평가:
다음과 같은 경우에는 프로젝션이 제한된 열을 마스킹 정책이나 행 액세스 정책에서 참조할 수 없습니다.
테이블에 행 액세스 정책 할당.
조건부 마스킹 정책 에서 하나 이상의 열 열거.
매핑 테이블 조회 수행.
이 항목의 제한 사항 에서 설명한 대로, 프로젝션 정책
body
는 마스킹 정책으로 보호되는 열이나 행 액세스 정책으로 보호되는 테이블을 참조할 수 없습니다.
다른 프로젝션 정책이 있는 종속 오브젝트¶
다음과 같은 일련의 오브젝트를 생각해 보십시오.
base_table
»v1
»v2
여기서
v1
은base_table
라는 테이블에서 만든 뷰입니다.
v2
는v1
에서 만든 뷰입니다.
프로젝션이 제한된 뷰의 열에 대한 쿼리가 있고 해당 열이 base_table
에서 프로젝션이 제한된 열에 종속되는 경우 뷰 열은 두 가지 프로젝션 정책이 모두 열이 프로젝션되도록 허용하는 경우에만 프로젝션됩니다.
Snowflake는 기본 테이블까지 열 계보 체인을 검사하여 열에 대한 참조가 프로젝션 제한을 받지 않도록 보장합니다. 계보 체인의 열이 프로젝션으로 제한되고 해당 열의 프로젝션이 허용되지 않는 경우 Snowflake는 쿼리를 차단합니다.
뷰와 구체화된 뷰¶
뷰 열의 프로젝션 정책은 기본 테이블 열이 아닌 뷰 열을 제한합니다.
참조와 관련하여 테이블 열을 제한하는 프로젝션 정책은 제한된 테이블 열을 참조하는 뷰로 전달됩니다.
스트림 및 작업¶
테이블의 열에 대한 프로젝션 정책은 동일한 테이블의 스트림으로 전달됩니다. 스트림에는 프로젝션 정책을 설정할 수 없습니다.
마찬가지로, 제한된 프로젝션 열은 작업이 제한된 열을 참조할 때 제한된 상태로 유지됩니다.
UNPIVOT¶
UNPIVOT 구문의 결과는 처음에 프로젝션 정책에 의해 열이 제한되었는지 여부에 따라 달라집니다. 참고:
UNPIVOT 실행 전후의 제한된 열은 프로젝션이 제한된 상태로 유지됩니다.
name_column
은 항상 쿼리 결과에 나타납니다.column_list
에 프로젝션이 제한된 열이 있으면value_column
도 프로젝션이 제한됩니다.
복제된 오브젝트¶
다음 접근 방식은 복제된 데이터베이스 또는 스키마에 저장된 복제된 테이블 또는 뷰에 대한 SELECT 권한이 있는 사용자의 데이터를 보호하는 데 도움이 됩니다.
개별 프로젝션 정책 오브젝트를 복제하는 기능은 지원되지 않습니다.
스키마를 복제하면 스키마 내의 모든 프로젝션 정책이 복제됩니다.
복제된 테이블은 원본 테이블과 동일한 프로젝션 정책에 매핑됩니다.
테이블이 상위 스키마 복제 컨텍스트에서 복제되는 경우, 원본 테이블에 동일한 상위 스키마의 프로젝션 정책에 대한 참조(즉, 로컬 참조)가 있으면 복제된 테이블도 복제된 프로젝션 정책에 대한 참조를 갖습니다.
원본 테이블이 다른 스키마(즉, 외부 참조)의 프로젝션 정책을 참조하는 경우 복제된 테이블에도 외부 참조가 유지합니다.
자세한 내용은 CREATE <오브젝트> … CLONE 섹션을 참조하십시오.
복제¶
프로젝션 정책 및 해당 할당은 데이터베이스 복제 및 복제 그룹을 사용하여 복제할 수 있습니다.
데이터베이스 복제 의 경우, 다음 조건 중 하나가 참이면 복제 작업이 실패합니다.
기본 데이터베이스가 Enterprise 이상 계정에 있고 정책이 포함되어 있지만, 복제가 승인된 1개 이상의 계정이 하위 에디션에 있습니다.
기본 데이터베이스에 포함된 테이블 또는 뷰에 다른 데이터베이스의 프로젝션 정책에 대한 현수 참조 가 있습니다.
복제 그룹 에서 여러 데이터베이스를 복제할 때 데이터베이스 복제에 대한 현수 참조 동작을 피할 수 있습니다.
사용자 정의 함수(UDF)¶
프로젝션 제약 조건과 UDF에 관해 다음 사항에 유의하십시오.
- 스칼라 SQL UDFs:
Snowflake는 UDF를 평가한 다음 프로젝션 제한 열에 프로젝션 정책을 적용합니다.
SELECT 문의 열이 프로젝션 제한 열에서도 파생된 UDF에서 전이적으로 파생된 경우 Snowflake는 쿼리를 차단합니다. 즉:
(SELECT 문의)
pc_column
» UDF » 열여기서
pc_column
은 프로젝션 제한 열을 참조합니다.
SELECT 문의 열을 프로젝션 제한 열로 추적할 수 있으므로 Snowflake는 쿼리를 차단합니다.
- SQL UDTFs:
SQL 사용자 정의 테이블 함수(UDTF)는 행이 함수 출력에 반환되기 때문에 Snowflake가 각 테이블 열을 독립적으로 평가하여 함수 출력에 열을 프로젝션할지 여부를 결정한다는 점을 제외하면 SQL UDF와 동일한 동작을 따릅니다.
- 기타 UDF:
다음은 Java UDF 소개, JavaScript UDF 소개, Python UDF 소개 에 적용됩니다.
UDTF 출력에서 프로젝션 제한 열이 제한됩니다.
- 로깅 및 이벤트 테이블:
UDF, UDTF 또는 JavaScript UDF에 프로젝션이 제한된 인자가 있는 경우 Snowflake는 해당 이벤트 테이블에서 로그 및 이벤트 세부 정보를 캡처하지 않습니다. 그러나 Snowflake에서는 UDF/UDTF의 실행을 허용하고 로깅 이유로 인해 UDF/UDTF를 호출하는 문이 실패하지 않습니다.
권한과 명령¶
다음 하위 섹션에서는 프로젝션 정책을 관리하는 데 도움이 되는 정보를 제공합니다.
프로젝션 정책 권한¶
Snowflake는 프로젝션 정책 오브젝트에 대해 다음 권한을 지원합니다.
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
권한 |
사용법 |
---|---|
APPLY |
열의 프로젝션 정책에 대한 설정 및 설정 해제 작업을 활성화합니다. |
OWNERSHIP |
프로젝션 정책에 대한 모든 제어권을 부여하는 프로젝션 정책의 소유권을 이전합니다. 프로젝션 정책의 속성 대부분을 변경하는 데 필요합니다. |
자세한 내용은 이 항목의 DDL 명령, 작업 및 권한 요약 섹션을 참조하십시오.
프로젝션 정책 DDL 참조¶
Snowflake는 프로젝션 정책 생성과 관리를 위해 다음 DDL을 지원합니다.
DDL 명령, 작업 및 권한 요약¶
다음 테이블은 프로젝션 정책 권한과 DDL 작업 사이의 관계를 요약하여 보여줍니다.
스키마의 모든 오브젝트에 대해 작업하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
작업 |
필요한 권한 |
---|---|
프로젝션 정책을 만듭니다. |
동일한 스키마에서 CREATE PROJECTION POLICY 권한이 있는 역할. |
프로젝션 정책을 변경합니다. |
프로젝션 정책에 대한 OWNERSHIP 권한이 있는 역할. |
프로젝션 정책을 설명합니다. |
다음 중 하나:
|
프로젝션 정책을 삭제합니다. |
프로젝션 정책에 대한 OWNERSHIP 권한이 있는 역할. |
프로젝션 정책을 표시합니다. |
다음 중 하나:
|
열에 대한 프로젝션 정책을 설정하거나 설정 해제합니다. |
다음 중 하나:
|
Snowflake는 오브젝트에 대한 프로젝션 정책을 만들고 설정할 수 있는 다양한 권한을 지원합니다.
projection_policy_admin
사용자 지정 역할이 모든 열에 대한 프로젝션 정책을 만들고 설정하는 중앙 집중식 프로젝션 정책 관리 접근 방식의 경우, 다음 권한이 필요합니다.USE ROLE securityadmin; GRANT USAGE ON DATABASE mydb TO ROLE projection_policy_admin; GRANT USAGE ON SCHEMA mydb.schema TO ROLE projection_policy_admin; GRANT CREATE PROJECTION POLICY ON SCHEMA mydb.schema TO ROLE projection_policy_admin; GRANT APPLY ON PROJECTION POLICY ON ACCOUNT TO ROLE projection_policy_admin;
하이브리드 관리 접근 방식에서는, 프로젝션 정책이 일관되게 명명되고 개별 팀 또는 역할이 특정 프로젝션 정책에 대한 APPLY 권한을 갖도록 보장하기 위해 단일 역할에 CREATE PROJECTION POLICY 권한이 주어집니다.
예를 들어, 사용자 지정 역할
finance_role
이 소유한 테이블과 뷰에 프로젝션 정책cost_center
를 설정할 권한을 이 역할에 부여할 수 있습니다(즉, 역할이 테이블 또는 뷰에 대해 OWNERSHIP 권한을 가짐).USE ROLE securityadmin; GRANT CREATE PROJECTION POLICY ON SCHEMA mydb.schema TO ROLE projection_policy_admin; GRANT APPLY ON PROJECTION POLICY cost_center TO ROLE finance_role;