ALTER ROW ACCESS POLICY
ALTER ROW ACCESS POLICY
기존 행 접근 정책(row access policy)의 속성을 수정하는 명령이에요. 정책 이름 바꾸기와 정책 규칙 교체를 포함해요. 정책 규칙 변경 사항은 해당 정책을 사용하는 다음 SQL 쿼리가 실행될 때 적용돼요.
출처: 문서
본문
Enterprise Edition(이상)이 필요해요. 업그레이드 문의는 Snowflake Support에 연락하세요.
행 접근 정책 DDL: Row access policy DDL
구문 (Syntax)
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> RENAME TO <new_name>
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET BODY -> <expression_on_arg_name>
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET TAG <tag_name> = '<tag_value>' [ , <tag_name> = '<tag_value>' ... ]
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> UNSET TAG <tag_name> [ , <tag_name> ... ]
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> SET COMMENT = '<string_literal>'
ALTER ROW ACCESS POLICY [ IF EXISTS ] <name> UNSET COMMENT
매개변수 (Parameters)
name — 행 접근 정책의 식별자로, 정책의 상위 스키마에서 고유해야 해요.
식별자 값은 알파벳 문자로 시작해야 하며, 전체 식별자 문자열을 큰따옴표로 묶지 않는 한 공백이나 특수 문자를 포함할 수 없어요(예: "My object"). 큰따옴표로 묶은 식별자는 대소문자를 구분해요. 자세한 내용은 식별자 요구사항을 참고하세요.
RENAME TO new_name — 행 접근 정책의 새 식별자를 지정해요. 스키마에서 고유해야 해요. 다른 행 접근 정책에 이미 사용 중인 식별자는 사용할 수 없어요.
자세한 내용은 식별자 요구사항을 참고하세요.
객체의 이름을 바꾸면서 다른 데이터베이스 및/또는 스키마로 이동할 수 있어요. 그러려면 db_name.schema_name.object_name 또는 schema_name.object_name 형식으로 새 위치가 포함된 정규화된 new_name 값을 지정해요.
참고
- 대상 데이터베이스 및/또는 스키마는 이미 존재해야 해요. 새 위치에 같은 이름의 객체가 이미 있으면 문이 오류를 반환해요.
- 객체 소유자(즉 객체에 OWNERSHIP 권한이 있는 역할)가 대상 스키마도 소유하지 않는 한, 관리형 접근 스키마로의 이동은 금지돼요.
SET ... — 행 접근 정책에 설정할 하나 이상의 속성을 지정해요:
BODY -> expression_on_arg_name — 데이터를 필터링하는 SQL 식이에요.
식에는 조건부 논리를 나타내는 조건부 표현식 함수, 데이터를 변환하는 기본 제공 함수 또는 UDF를 포함할 수 있어요.
행 접근 정책 본문 안에서 UDF나 외부 함수를 사용하면 정책 소유자가 해당 UDF나 외부 함수에 OWNERSHIP 권한이 있어야 해요. 행 접근 정책이 적용된 데이터베이스 객체를 쿼리하는 사용자는 해당 UDF나 외부 함수에 USAGE 권한이 필요하지 않아요.
TAG tag_name = 'tag_value' [ , tag_name = 'tag_value' , ... ] — 태그 이름과 태그 문자열 값을 지정해요.
태그 값은 항상 문자열이며, 최대 문자 수는 256이에요. 문에서 태그를 지정하는 방법은 태그 할당량을 참고하세요.
COMMENT = 'string_literal' — 마스킹 정책의 주석을 추가하거나 기존 주석을 덮어써요.
기본값: 값 없음
UNSET ... — 마스킹 정책에서 해제할 하나 이상의 속성 및/또는 매개변수를 기본값으로 되돌려요:
TAG tag_name [ , tag_name ... ]COMMENT
속성/매개변수를 재설정할 때는 이름만 지정해야 하며, 값을 지정하면 오류가 반환돼요.
접근 제어 요구사항 (Access control requirements)
이 작업을 실행하는 데 사용되는 역할은 최소한 다음 권한을 보유해야 해요: GRANT OWNERSHIP
| 권한 | 객체 | 설명 |
|---|---|---|
| OWNERSHIP | Row access policy | OWNERSHIP은 객체를 만든 역할에 자동으로 부여되는 객체의 특별한 권한이에요. 소유 역할(또는 MANAGE GRANTS 권한이 있는 역할)이 GRANT OWNERSHIP 명령으로 다른 역할에 이전할 수도 있어요. |
스키마의 객체를 조작하려면 상위 데이터베이스와 상위 스키마 각각에 대해 하나 이상의 권한이 필요해요.
지정한 권한 집합을 가진 사용자 정의 역할을 만드는 방법은 사용자 정의 역할 만들기를 참고하세요.
보호 객체에서 SQL 작업을 수행할 때 역할과 권한 부여에 대한 일반 정보는 접근 제어 개요를 참고하세요.
행 접근 정책 DDL과 권한에 대한 추가 내용은 행 접근 정책 관리를 참고하세요.
사용 메모 (Usage notes)
- 기존 행 접근 정책을 업데이트하려고 하는데 현재 정의를 확인해야 한다면 GET_DDL 함수를 호출하거나 DESCRIBE ROW ACCESS POLICY 명령을 실행해요.
- 정책 시그니처(즉 인자 이름이나 입출력 데이터 타입)는 변경할 수 없어요. 마찬가지로, 정책이 테이블이나 뷰에 연결된 경우
CREATE OR REPLACE ROW ACCESS POLICY는 지원되지 않아요. 시그니처를 변경해야 한다면 정책에 DROP ROW ACCESS POLICY 문을 실행하고 새 행 접근 정책을 만들어요. - ALTER 문을 실행하기 전에 DESCRIBE ROW ACCESS POLICY 문을 실행해 정책 업데이트에 사용할 인자 이름을 결정할 수 있어요.
- 정책 본문에 서브쿼리를 하나 이상 포함하면 오류가 발생할 수 있어요. 가능하면 서브쿼리 수, JOIN 작업 수를 줄이고 WHERE 절 조건을 단순화해요.
- 정책
body에 매핑 테이블 조회가 포함되면 중앙 집중식 매핑 테이블을 만들어 보호된 테이블과 같은 데이터베이스에 저장해요. 특히body가 IS_DATABASE_ROLE_IN_SESSION 함수를 호출하면 중요해요. 자세한 내용은 해당 함수의 사용 메모를 참고하세요. - 메타데이터 관련: Snowflake 서비스를 사용할 때 메타데이터로 개인 데이터(User 객체 외), 민감한 데이터, 수출 통제 데이터 또는 기타 규제 대상 데이터를 입력하지 않도록 주의해야 해요. 자세한 내용은 Snowflake의 메타데이터 필드를 참고하세요.
예시 (Examples)
다음 예시는 행 접근 정책을 업데이트해요.
DESC ROW ACCESS POLICY rap_table_employee_info;
+-------------------------+-------------+-------------+------+
| name | signature | return_type | body |
+-------------------------+-------------+-------------+------+
| rap_table_employee_info | (V VARCHAR) | BOOLEAN | true |
+-------------------------+-------------+-------------+------+
ALTER ROW ACCESS POLICY rap_table_employee_info SET BODY -> false;
더 알아보기 (Learn more)
- CREATE ROW ACCESS POLICY — 행 접근 정책 만들기
- DESCRIBE ROW ACCESS POLICY — 행 접근 정책 설명
- DROP ROW ACCESS POLICY — 행 접근 정책 삭제