POLICY_REFERENCES
POLICY_REFERENCES
POLICY_REFERENCES 함수는 지정된 정책이 객체에 할당된 각 객체에 대해 행을 반환하거나, 지정된 객체에 할당된 각 정책에 대해 행을 반환해요.
참고: POLICY_REFERENCES 뷰(계정 사용량 뷰)도 참조하세요.
출처: 문서
본문
문법 (Syntax)
네트워크 정책 객체 전용:
POLICY_REFERENCES(
POLICY_NAME => '<string>' ,
POLICY_KIND => 'NETWORK_POLICY'
)
기타 정책 객체:
POLICY_REFERENCES(
POLICY_NAME => '<string>'
)
모든 정책 객체:
POLICY_REFERENCES(
REF_ENTITY_NAME => '<string>' ,
REF_ENTITY_DOMAIN => '<string>'
)
인자 (Arguments)
- POLICY_NAME => 'string' — 정책 이름을 지정해요. 전체 정책 이름은 작은따옴표로 감싸야 해요. 정책 이름이 대소문자를 구분하거나 특수 문자나 공백을 포함하면, 대소문자/문자를 처리하려면 큰따옴표가 필요해요. 큰따옴표는 작은따옴표 안에 넣어야 해요 (즉
'"<policy_name>"'). 현재 Snowflake는 인자로 정책 이름을 지정할 때 다음 정책들을 지원해요: 집계 정책(aggregation policies), 인증 정책(authentication policy), 피처 정책(feature policy), 마스킹 정책(masking policy), 네트워크 정책(network policy), 패키지 정책(packages policy), 암호 정책(password policy), 프로젝션 정책(projection policies), 행 액세스 정책(row access policy), 세션 정책(session policy), 스토리지 수명주기 정책(storage lifecycle policies). - POLICY_KIND => 'NETWORK_POLICY' — POLICY_NAME 값이 네트워크 정책일 때만 이 인자를 사용해요. 다른 종류의 정책 이름을 지정할 때는 이 인자를 사용하지 마세요.
- REF_ENTITY_NAME => 'string' — 정책이 설정된 객체의 이름, 예를 들어 테이블 이름, 뷰 이름, 외부 테이블 이름 또는 사용자 이름이에요. 전체 객체 이름은 작은따옴표로 감싸야 해요. 객체 이름이 대소문자를 구분하거나 특수 문자나 공백을 포함하면 큰따옴표가 필요해요. 큰따옴표는 작은따옴표 안에 넣어야 해요 (즉
'"<table_name>"'). - REF_ENTITY_DOMAIN => 'string' — 정책이 설정된 객체 유형이에요. 객체가 외부 테이블이면 인자 값으로
'TABLE'을 사용해요. 객체가 구체화된 뷰(materialized view)이면 인자 값으로'VIEW'를 사용해요. 지원되는 도메인:'ACCOUNT','INTEGRATION','TABLE','TAG','USER','VIEW'.
반환 (Returns)
이 함수는 다음 열을 반환해요:
| 열 (Column) | 데이터 타입 (Data Type) | 설명 (Description) |
|---|---|---|
| POLICY_DB | VARCHAR | 정책이 설정된 데이터베이스 |
| POLICY_SCHEMA | VARCHAR | 정책이 설정된 스키마 |
| POLICY_NAME | VARCHAR | 정책의 이름 |
| POLICY_KIND | VARCHAR(17) | Snowflake의 정책 유형 |
| REF_DATABASE_NAME | VARCHAR | 조회된 객체가 참조하는 객체를 포함하는 데이터베이스의 이름 |
| REF_SCHEMA_NAME | VARCHAR | 조회된 객체가 참조하는 객체를 포함하는 스키마의 이름 |
| REF_ENTITY_NAME | VARCHAR | 정책이 설정된 객체(즉 table_name, view_name, external_table_name)의 이름 |
| REF_ENTITY_DOMAIN | VARCHAR | 정책이 설정된 객체 유형(즉 table, view) |
| REF_COLUMN_NAME | VARCHAR | 정책이 설정된 열 이름 |
| REF_ARG_COLUMN_NAMES | VARCHAR | 마스킹 정책이 설정된 쿼리 결과의 행에 대해 NULL을 반환 |
| TAG_DATABASE | VARCHAR | 태그에 정책이 할당된 태그를 포함하는 데이터베이스의 이름 또는 태그에 정책이 할당되지 않은 경우 NULL |
| TAG_SCHEMA | VARCHAR | 태그에 정책이 할당된 태그를 포함하는 스키마의 이름 또는 태그에 정책이 할당되지 않은 경우 NULL |
| TAG_NAME | VARCHAR | 정책이 할당된 태그의 이름 또는 태그에 정책이 할당되지 않은 경우 NULL |
| POLICY_STATUS | VARCHAR | 정책의 상태를 지정하며 다음 네 가지 값 중 하나일 수 있어요: ACTIVE, MULTIPLE_MASKING_POLICY_ASSIGNED_TO_THE_COLUMN, COLUMN_IS_MISSING_FOR_SECONDARY_ARG, COLUMN_DATATYPE_MISMATCH_FOR_SECONDARY_ARG |
POLICY_STATUS 열에 대해 다음을 유의하세요:
- ACTIVE — 열(즉 REF_COLUMN_NAME)이 단일 정책과만 연관되어 있다는 것을 지정해요.
- MULTIPLE_MASKING_POLICY_ASSIGNED_TO_THE_COLUMN — 동일한 열에 여러 마스킹 정책이 할당되어 있다는 것을 지정해요.
- COLUMN_IS_MISSING_FOR_SECONDARY_ARG — 정책(즉 POLICY_NAME)이 조건부 마스킹 정책이고 테이블(즉 REF_ENTITY_NAME)에 같은 이름의 열이 없다는 것을 지정해요.
- COLUMN_DATATYPE_MISMATCH_FOR_SECONDARY_ARG — 정책이 조건부 마스킹 정책이고 테이블에 같은 이름의 열이 있지만 마스킹 정책 시그니처의 데이터 타입과 다른 데이터 타입을 가진다는 것을 지정해요.
사용 메모 (Usage notes)
- 결과는 쿼리를 실행하는 역할에 부여된 특권에 따라 반환돼요:
- 역할에 글로벌 APPLY MASKING POLICY 특권이 있으면 Snowflake는 쿼리 결과에 모든 마스킹 정책 연관을 반환해요.
- 역할에 글로벌 APPLY ROW ACCESS POLICY 특권이 있으면 Snowflake는 쿼리 결과에 모든 행 액세스 정책 연관을 반환해요.
- 역할에 특정 정책에 대한 APPLY 특권이 있으면(예:
APPLY on MASKING POLICY) Snowflake는 쿼리를 실행하는 역할이 소유한 객체에 대해서만 해당 정책의 연관을 반환해요. - 역할에 정책에 대한 APPLY 또는 OWNERSHIP 특권이 있지만 테이블이나 뷰에 대한 OWNERSHIP이 없으면 Snowflake는 쿼리 결과에 정책 연관을 표시하지 않아요. 테이블이나 뷰에 대한 SELECT 특권만으로는 충분하지 않아요.
- 역할에 정책 권한이 없지만 테이블에 대한 OWNERSHIP 특권이 있으면 Snowflake는 오류 메시지를 반환하고 정책 연관을 표시하지 않아요.
- 정보 스키마(Information Schema) 테이블 함수를 호출할 때 세션에 INFORMATION_SCHEMA 스키마가 사용 중이거나 함수가 정규화된 객체 이름을 사용해야 해요. 자세한 내용은 Snowflake Information Schema를 참조하세요.
- 쿼리를 실행하려면 구문 변형 하나를 선택하세요. 인자를 혼합하면 오류와 쿼리 실패가 발생해요. ref_entity_name과 ref_entity_domain 인자는 함께 포함되어야 하며 그렇지 않으면 쿼리가 실패해요.
- 지정된 객체 이름이 존재하지 않거나 쿼리 연산자가 객체의 정책을 볼 권한이 없으면 Snowflake는 오류를 반환해요. 연산자가 정책 연관의 일부 하위 집합을 볼 수 있으면 Snowflake는 정책 연관의 결과 집합을 반환할 수 있어요. ref_entity_domain으로 나열된 지원되지 않는 객체 유형(예: 'stream')도 오류를 반환해요.
- 쿼리 연산자가 정책에 대한 APPLY 또는 OWNERSHIP 특권을 모두 갖고 있지 않으면 Snowflake는 결과 집합을 반환하지 않아요.
예제 (Examples)
ssn_mask라는 마스킹 정책이 열에 설정된 각 객체(예: 테이블 또는 뷰)에 대해 행을 반환해요:
use database my_db;
use schema information_schema;
select *
from table(information_schema.policy_references(policy_name => 'my_db.my_schema.ssn_mask'));
my_table이라는 테이블에 할당된 각 정책에 대해 행을 반환해요:
use database my_db;
use schema information_schema;
select *
from table(information_schema.policy_references(ref_entity_name => 'my_db.my_schema.my_table', ref_entity_domain => 'table'));