CREATE PROJECTION POLICY
CREATE PROJECTION POLICY
현재/지정한 스키마에 새 프로젝션 정책(projection policy)을 만들거나 기존 프로젝션 정책을 교체하는 명령이에요. 프로젝션 정책은 테이블이나 뷰의 컬럼이 쿼리 결과에 프로젝트(project)되는 것을 제어해요.
출처: 문서
본문
현재/지정한 스키마에 새 프로젝션 정책을 만들거나 기존 프로젝션 정책을 교체해요.
프로젝션 정책을 만든 뒤에는 ALTER TABLE … ALTER COLUMN 명령으로 테이블 컬럼에, 또는 ALTER VIEW 명령으로 뷰 컬럼에 정책을 적용해요.
함께 보기: 프로젝션 정책 DDL 참조 (Projection policy DDL reference)
구문 (Syntax)
CREATE [ OR REPLACE ] PROJECTION POLICY [ IF NOT EXISTS ] <name>
AS () RETURNS PROJECTION_CONSTRAINT -> <body>
[ COMMENT = '<string_literal>' ]
매개변수 (Parameters)
name
프로젝션 정책의 식별자로, 스키마 안에서 고유해야 해요.
식별자 값은 반드시 알파벳 문자로 시작해야 하며, 전체 식별자 문자열이 큰따옴표로 묶이지 않는 한 공백이나 특수 문자를 포함할 수 없어요 (예: "My object"). 큰따옴표로 묶인 식별자는 대소문자를 구분해요.
자세한 내용은 식별자 요구 사항(Identifier requirements)을 참고해요.
body
컬럼을 프로젝트할지 여부를 결정하는 SQL 표현식이에요.
표현식은 CASE 및 기타 로직 문을 포함할 수 있지만, 반드시 PROJECTION_CONSTRAINT 함수를 호출해야 해요.
PROJECTION_CONSTRAINT(ALLOW=>{TRUE|FALSE}, ENFORCEMENT=><enforcement_style>)
ALLOW(boolean) — TRUE는 컬럼을 프로젝트할 수 있게 해요. FALSE는 컬럼을 프로젝트하지 못하게 하며, 동작은 ENFORCEMENT로 지정돼요. FALSE는 최종 결과 테이블에 나타나는 컬럼에만 영향을 미쳐요.ENFORCEMENT(string, 선택) — ALLOW=FALSE일 때, 쿼리가 보호된 컬럼을 포함하면 어떻게 되는지 지정해요. 지원되는 값은 다음과 같아요.- FAIL: 보호된 컬럼이 가장 바깥쪽 쿼리에 포함되면 쿼리가 실패해요.
- NULLIFY: 보호된 컬럼의 모든 행이 NULL 값을 반환해요.
- 기본값: FAIL
COMMENT = 'string_literal'
프로젝션 정책에 대한 설명(comment)을 추가하거나 기존 설명을 덮어써요.
접근 제어 요구 사항 (Access control requirements)
이 작업을 실행하는 데 사용하는 역할(role)은 최소한 다음 권한을 가져야 해요.
| 권한 (Privilege) | 객체 (Object) | 비고 |
|---|---|---|
| CREATE PROJECTION POLICY | Schema |
스키마 안의 객체를 작업하려면 상위 데이터베이스에 대한 권한이 최소 하나, 상위 스키마에 대한 권한이 최소 하나 필요해요.
지정된 권한 집합으로 사용자 지정 역할을 만드는 방법은 사용자 지정 역할 만들기(Creating custom roles)를 참고해요. 보호 가능한 객체에 대해 SQL 작업을 수행하기 위한 역할과 권한 부여의 일반적인 내용은 접근 제어 개요(Overview of Access Control)를 참고해요.
프로젝션 정책 DDL과 권한에 대한 자세한 내용은 권한과 명령(Privileges and commands)을 참고해요.
사용 메모 (Usage notes)
기존 프로젝션 정책을 수정해야 하고 현재 정책 정의를 확인해야 한다면 DESCRIBE PROJECTION POLICY 명령이나 GET_DDL 함수를 실행해요.
OR REPLACE와 IF NOT EXISTS 절은 서로 배타적이에요. 같은 문에서 둘 다 사용할 수 없어요.
CREATE OR REPLACE <object> 문은 원자적(atomic)으로 동작해요. 즉, 객체를 교체할 때 기존 객체는 삭제되고 새 객체는 단일 트랜잭션 안에서 생성돼요.
메타데이터에 관해서는 다음 사항에 주의해요.
⚠️ 주의: 고객은 Snowflake 서비스를 사용할 때 (User 객체를 제외하고) 개인 데이터·민감 데이터·수출 통제 데이터·기타 규제 데이터를 메타데이터로 입력하지 않도록 해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고해요.
예시 (Examples)
컬럼을 프로젝트하지 못하도록 해요.
CREATE OR REPLACE PROJECTION POLICY do_not_project AS ()
RETURNS PROJECTION_CONSTRAINT ->
PROJECTION_CONSTRAINT(ALLOW => false);
analyst 사용자 지정 역할에는 컬럼을 프로젝트하고, 그 외에는 쿼리를 허용하되 보호된 컬럼 값을 모두 NULL로 대체해요.
CREATE OR REPLACE PROJECTION POLICY project_analyst_only AS ()
RETURNS PROJECTION_CONSTRAINT ->
CASE
WHEN CURRENT_ROLE() = 'ANALYST'
THEN PROJECTION_CONSTRAINT(ALLOW => true)
ELSE PROJECTION_CONSTRAINT(ALLOW => false, ENFORCEMENT => 'NULLIFY')
END;
더 알아보기 (Learn more)
- 프로젝션 정책 DDL 참조 — 프로젝션 정책 관련 DDL 문서
- 권한과 명령 — 정책 권한 관련 문서