ALTER VIEW¶
기존 뷰의 속성을 수정합니다. 현재 유일하게 지원되는 작업은 다음과 같습니다.
뷰 이름 바꾸기.
보안 뷰로 변환(또는 되돌리기).
뷰에 대한 설명 추가, 덮어쓰기, 제거.
이 명령을 사용하여 뷰에 대한 정의를 변경할 수 없습니다. 뷰 정의를 변경하려면 뷰를 삭제한 다음 다시 만들어야 합니다.
- 참고 항목:
구문¶
ALTER VIEW [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER VIEW [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER VIEW [ IF EXISTS ] <name> UNSET COMMENT
ALTER VIEW [ IF EXISTS ] <name> SET SECURE
ALTER VIEW [ IF EXISTS ] <name> SET CHANGE_TRACKING = { TRUE | FALSE }
ALTER VIEW [ IF EXISTS ] <name> UNSET SECURE
ALTER VIEW [ IF EXISTS ] <name> dataGovnPolicyTagAction
여기서
dataGovnPolicyTagAction ::= { SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | UNSET TAG <tag_name> [ , <tag_name> ... ] } | { ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ROW ACCESS POLICY <policy_name> | DROP ROW ACCESS POLICY <policy_name> , ADD ROW ACCESS POLICY <policy_name> ON ( <col_name> [ , ... ] ) | DROP ALL ROW ACCESS POLICIES } | { SET AGGREGATION POLICY <policy_name> [ FORCE ] | UNSET AGGREGATION POLICY } | ADD [ COLUMN ] [ IF NOT EXISTS ] <col_name> <col_type> [ [ WITH ] MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] ] [ [ WITH ] TAG ( <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' , ... ] ) ] | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET MASKING POLICY <policy_name> [ USING ( <col1_name> , <cond_col_1> , ... ) ] [ FORCE ] | UNSET MASKING POLICY } | { { ALTER | MODIFY } [ COLUMN ] <col1_name> SET PROJECTION POLICY <policy_name> [ FORCE ] | UNSET PROJECTION POLICY } | { ALTER | MODIFY } [ COLUMN ] <col1_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] , [ COLUMN ] <col2_name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ] | { ALTER | MODIFY } [ COLUMN ] <col1_name> UNSET TAG <tag_name> [ , <tag_name> ... ] , [ COLUMN ] <col2_name> UNSET TAG <tag_name> [ , <tag_name> ... ]
매개 변수¶
name
변경할 뷰의 식별자를 지정합니다. 식별자에 공백이나 특수 문자가 포함된 경우 전체 문자열을 큰따옴표로 묶어야 합니다. 큰따옴표로 묶인 식별자도 대/소문자를 구분합니다.
RENAME TO new_name
뷰에 대해 새 식별자를 지정하는데, 스키마에 대해 고유한 식별자여야 합니다.
자세한 내용은 식별자 요구 사항 섹션을 참조하십시오.
선택적으로 오브젝트의 이름을 바꾸는 동안 오브젝트를 다른 데이터베이스 및/또는 스키마로 이동할 수 있습니다. 그러려면 각각
db_name.schema_name.object_name
또는schema_name.object_name
형식으로 새 데이터베이스 및/또는 스키마 이름을 포함하는 정규화된new_name
값을 지정하십시오.참고
대상 데이터베이스 및/또는 스키마가 이미 있어야 합니다. 또한, 새 위치에 이름이 같은 오브젝트가 있으면 안 됩니다. 그렇지 않으면 문이 오류를 반환합니다.
오브젝트 소유자(즉, 오브젝트에 대한 OWNERSHIP 권한을 가진 역할) 역시 대상 스키마를 소유하지 않는 한 오브젝트를 관리되는 액세스 스키마로 이동하는 것은 금지됩니다.
오브젝트의 이름이 바뀌면 그 오브젝트를 참조하는 다른 오브젝트도 새 이름으로 업데이트해야 합니다.
SET ...
뷰에 대해 설정할 속성을 지정합니다.
SECURE
뷰를 보안으로 지정합니다.
CHANGE_TRACKING = TRUE | FALSE
테이블에서 변경 내용 추적을 활성화 또는 비활성화하도록 지정합니다.
TRUE
를 지정하면 뷰에서 변경 내용 추적이 활성화되고 설정이 모든 기본 테이블에 계단식으로 적용됩니다.FALSE
를 지정하면 뷰에서 변경 내용 추적이 비활성화되고 설정이 모든 기본 테이블에 계단식으로 적용됩니다.
COMMENT = 'string_literal'
뷰에 대한 설명을 추가하거나 기존 설명을 덮어씁니다.
참고
각 뷰 속성을 개별적으로 설정해야 합니다.
UNSET ...
뷰에 대해 설정 해제할 속성을 지정하여 기본값으로 재설정합니다.
SECURE
COMMENT
속성을 재설정할 때는 이름만 지정하십시오. 속성 값을 지정하면 오류가 반환됩니다.
참고
각 뷰 속성을 개별적으로 재설정해야 합니다.
데이터 거버넌스 정책 및 태그 작업(dataGovnPolicyTagAction
)¶
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ]
태그 이름과 태그 문자열 값을 지정합니다.
태그 값은 항상 문자열이며, 태그 값의 최대 문자 수는 256자입니다.
문에서 태그를 지정하는 방법에 대한 자세한 내용은 오브젝트 및 열에 대한 태그 할당량 섹션을 참조하십시오.
policy_name
정책의 식별자로, 스키마에 고유한 식별자여야 합니다.
다음 절은 테이블, 뷰, 이벤트 테이블 등 행 액세스 정책을 지원하는 모든 테이블 종류에 적용됩니다. 단순화하기 위해 해당 절에서는 “테이블”만 참조합니다.
ADD ROW ACCESS POLICY policy_name ON (col_name [ , ... ])
테이블에 행 액세스 정책을 추가합니다.
하나 이상의 열 이름을 지정해야 합니다. 각 열 이름을 구분하는 쉼표로 추가 열을 지정할 수 있습니다. 이 식을 사용하여 이벤트 테이블과 외부 테이블에 모두 행 액세스 정책을 추가합니다.
DROP ROW ACCESS POLICY policy_name
테이블에서 행 액세스 정책을 삭제합니다.
이 절을 사용하여 테이블에서 정책을 삭제합니다.
DROP ROW ACCESS POLICY policy_name, ADD ROW ACCESS POLICY policy_name ON ( col_name [ , ... ] )
테이블에 설정된 행 액세스 정책을 삭제하고 단일 SQL 문으로 동일한 테이블에 행 액세스 정책을 추가합니다.
DROP ALL ROW ACCESS POLICIES
테이블에서 모든 행 액세스 정책 연결을 삭제합니다.
이 식은 스키마에서 행 액세스 정책을 삭제한 후에 이벤트 테이블에서 정책을 삭제할 때 유용합니다. 테이블에서 행 액세스 정책 연결을 삭제하려면 이 식을 사용하십시오.
SET AGGREGATION POLICY policy_name [ FORCE ]
테이블에 집계 정책 을 할당합니다. 기존 집계 정책을 새 집계 정책으로 원자적으로 바꾸려면 선택적 FORCE 매개 변수를 사용하십시오.
UNSET AGGREGATION POLICY
테이블에서 집계 정책을 분리합니다.
{ ALTER | MODIFY } [ COLUMN ] ...
USING ( col_name , cond_col_1 ... )
조건부 마스킹 정책 SQL 식에 전달할 인자를 지정합니다.
목록의 첫 번째 열은 데이터를 마스킹하거나 토큰화할 정책 조건에 대한 열을 지정하며, 마스킹 정책이 설정된 열과 반드시 일치해야 합니다.
추가 열은 첫 번째 열에 대해 쿼리가 수행될 때 쿼리 결과의 각 행에 있는 데이터를 마스킹할지 또는 토큰화할지 결정하기 위해 평가할 열을 지정합니다.
USING 절을 생략하면 Snowflake는 조건부 마스킹 정책을 일반 마스킹 정책 으로 취급합니다.
FORCE
열에 현재 설정된 마스킹 또는 프로젝션 정책을 단일 문에서 다른 정책으로 바꿉니다.
마스킹 정책과 함께
FORCE
키워드를 사용하려면 열에 현재 설정된 마스킹 정책의 데이터 타입(즉, STRING)과 일치하도록 ALTER TABLE 문(즉, STRING)에 있는 정책의 데이터 타입 이 필요합니다.마스킹 정책이 열에 현재 설정되어 있지 않으면 이 키워드를 지정해도 아무 효과가 없습니다.
자세한 내용은 열의 마스킹 정책 바꾸기 또는 프로젝션 정책 바꾸기 섹션을 참조하십시오.
사용법 노트¶
뷰 소유자(즉, 뷰에 대한 OWNERSHIP 권한을 가진 역할) 역시 대상 스키마를 소유하지 않는 한 (ALTER VIEW … RENAME TO 구문을 사용하여) 뷰를 관리되는 액세스 스키마로 이동하는 것은 금지됩니다.
마스킹 정책의 경우:
USING
절과FORCE
키워드는 모두 선택 사항으로, 둘 중 어떤 것도 열에 대한 마스킹 정책을 설정할 필요가 없습니다.USING
절과FORCE
키워드는 따로 사용하거나 함께 사용할 수 있습니다. 자세한 내용은 다음을 참조하십시오.조건부 열을 사용하는 단일 마스킹 정책은 테이블의 열 구조가 정책에 지정된 열과 일치하는 경우 여러 테이블에 적용할 수 있습니다.
마스킹 정책으로 하나 이상의 테이블 열을 수정하거나 행 액세스 정책으로 테이블 자체를 수정할 때, POLICY_CONTEXT 함수를 사용하여, 마스킹 정책으로 보호되는 열과 행 액세스 정책으로 보호되는 테이블에 대한 쿼리를 시뮬레이션합니다.
조건부 열을 사용하는 단일 마스킹 정책은 뷰의 열 구조가 정책에 지정된 열과 일치하는 경우 여러 뷰에 적용할 수 있습니다.
행 액세스 정책의 경우:
Snowflake는 단일 SQL 문에서 행 액세스 정책 추가 및 삭제를 지원합니다.
예를 들어 테이블에 이미 설정된 행 액세스 정책을 다른 정책으로 바꾸려면 먼저 행 액세스 정책을 삭제한 다음 새 행 액세스 정책을 추가하십시오.
주어진 리소스(즉, 테이블 또는 뷰)의 경우, 행 액세스 정책을
ADD
또는DROP
하려면 스키마에 대한 APPLY ROW ACCESS POLICY 권한 또는 리소스에 대한 OWNERSHIP 권한과 행 액세스 정책 리소스에 대한 APPLY 권한이 있어야 합니다.테이블 또는 뷰는 한 번에 하나의 행 액세스 정책으로만 보호할 수 있습니다. 정책 본문이 행 액세스 정책으로 보호되는 테이블 또는 뷰 열이나 마스킹 정책으로 보호되는 열을 참조하는 경우 정책을 추가하는 데 실패합니다.
마찬가지로, 마스킹 정책 본문이 행 액세스 정책이나 다른 마스킹 정책으로 보호되는 테이블을 참조하는 경우 테이블 열에 마스킹 정책을 추가하는 데 실패합니다.
행 액세스 정책을 시스템 뷰 또는 테이블 함수에 적용할 수 없습니다.
다른 DROP <오브젝트> 작업과 마찬가지로, 행 액세스 정책이 추가되지 않은 리소스에서 행 액세스 정책을 삭제하려고 하면 Snowflake가 오류를 반환합니다.
오브젝트에 행 액세스 정책과 하나 이상의 마스킹 정책이 모두 있는 경우 행 액세스 정책이 먼저 평가됩니다.
메타데이터 관련:
주의
고객은 Snowflake 서비스를 사용할 때 개인 데이터(사용자 오브젝트 제외), 민감한 데이터, 수출 통제 대상 데이터 또는 기타 규제 데이터가 메타데이터로 입력되지 않도록 해야 합니다. 자세한 내용은 Snowflake의 메타데이터 필드 섹션을 참조하십시오.
예¶
뷰 이름을 view1
에서 view2
로 바꾸기:
ALTER VIEW view1 RENAME TO view2;
뷰를 보안 뷰로 변환:
ALTER VIEW view1 SET SECURE;
보안 뷰를 일반 뷰로 되돌리기:
ALTER VIEW view1 UNSET SECURE;
뷰 열에 열 수준 보안 마스킹 정책 적용:
-- single column ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v; -- multiple columns ALTER VIEW user_info_v MODIFY COLUMN ssn_number SET MASKING POLICY ssn_mask_v , COLUMN dob SET MASKING POLICY dob_mask_v ;
뷰 열에서 열 수준 보안 마스킹 정책 설정 해제:
-- single column ALTER VIEW user_info_v modify column ssn_number unset masking policy; -- multiple columns ALTER VIEW user_info_v modify column ssn_number unset masking policy , column dob unset masking policy ;
다음은 뷰에 행 액세스 정책을 추가하는 예입니다. 정책을 설정한 후, 정보 스키마 를 검사하여 확인할 수 있습니다.
alter view v1 add row access policy rap_v1 on (empl_id);
다음은 뷰에서 행 액세스 정책을 삭제하는 예입니다. 정보 스키마 를 쿼리하여 정책이 삭제되었음을 확인합니다.
alter view v1 drop row access policy rap_v1;
다음은 뷰에 대한 단일 SQL 문에서 행 액세스 정책 추가 및 삭제를 결합하는 방법을 보여주는 예입니다. 정보 스키마 를 검사하여 결과를 확인합니다.
alter view v1 drop row access policy rap_v1_version_1, add row access policy rap_v1_version_2 on (empl_id);