외부 토큰화 이해하기

이 항목에서는 External Tokenization 기능에 대한 일반적인 개요를 제공합니다.

외부 토큰화 마스킹 정책을 태그에 할당하여 태그 기반 외부 토큰화를 제공할 수 있습니다. 태그에 마스킹 정책을 할당하는 자세한 방법은 태그 기반 마스킹 정책 섹션을 참조하십시오.

중요

외부 토큰화를 위해서는 Snowflake Standard Edition 에 포함된 외부 함수 쓰기 가 필요하며 토큰화 공급자와 함께 외부 함수를 사용할 수 있습니다.

그러나 토큰화 공급자와 함께 Snowflake 외부 토큰화를 통합하려면 Enterprise Edition 이상으로 업그레이드해야 합니다.

업그레이드에 대해 문의하려면 Snowflake 지원 에 문의하십시오.

External Tokenization란 무엇입니까?

External Tokenization을 사용하면 계정은 데이터를 토큰화한 후 Snowflake에 로드하고 쿼리 런타임 시에 데이터의 토큰화를 해제할 수 있습니다. 토큰화는 민감한 데이터의 암호를 해독할 수 없는 토큰으로 대체하여 해당 데이터를 제거하는 프로세스입니다. External Tokenization은 외부 함수 와 함께 마스킹 정책을 사용합니다.

Snowflake에서 마스킹 정책은 스키마 수준 오브젝트입니다. 즉, 마스킹 정책을 열에 적용하려면 데이터베이스 및 스키마가 Snowflake에 있어야 합니다. 현재 Snowflake는 테이블 및 뷰에서 Dynamic Data Masking을 사용하는 것을 지원합니다.

쿼리 런타임 시점에, 열이 표시되는 모든 위치의 열에 마스킹 정책이 적용됩니다. 마스킹 정책 조건, SQL 실행 컨텍스트 및 역할 계층 구조에 따라, Snowflake 쿼리 연산자는 일반 텍스트 값, 부분적으로 마스킹된 값 또는 완전히 마스킹된 값을 볼 수 있습니다.

쿼리 런타임 동작, 정책 생성, 테이블 및 뷰와 함께 사용, 마스킹 정책을 사용한 관리 방식 등 마스킹 정책이 작동하는 방식에 대한 자세한 내용은 Column-level Security 이해하기 를 참조하십시오.

SQL 실행 컨텍스트 및 역할 계층 구조의 영향에 대한 자세한 내용은 고급 열 수준 보안 항목 을 참조하십시오.

Snowflake에 로드하기 전에 데이터를 토큰화하면 불필요하게 민감한 데이터가 노출되지 않습니다. 외부 함수와 함께 마스킹 정책을 사용하면 쿼리 런타임 시에 올바른 대상만 토큰이 해제된 데이터를 볼 수 있습니다.

외부 토큰화의 이점

다음은 External Tokenization의 주요 이점 중 일부를 요약하여 보여줍니다.

토큰화된 데이터 사전 로드

토큰화 공급자를 사용하면 토큰화된 데이터가 Snowflake에 사전에 로드됩니다. 그러므로 테이블이나 뷰의 열에 마스킹 정책을 적용하지 않아도 사용자에게 실제 데이터 값이 표시됩니다. 이를 통해 조직에서 가장 민감한 데이터에 대한 데이터 보안을 향상할 수 있습니다.

사용 편의성

정책은 한 번 작성하면 데이터베이스와 스키마 전체에서 수천 개의 열에 적용할 수 있습니다.

데이터 관리 및 SoD

보안 또는 개인정보보호 담당자는 오브젝트 소유자가 아닌 보호할 열을 결정합니다. 마스킹 정책은 관리가 쉽고 중앙 집중식 및 분산형 관리 모델을 지원합니다.

데이터 인증 및 거버넌스

역할 또는 사용자 지정 권한에 따라 컨텍스트 데이터에 액세스합니다.

보안 또는 개인정보보호 담당자가 구현한 데이터 거버넌스를 지원하며, ACCOUNTADMIN 또는 SECURITYADMIN 역할의 권한이 부여된 사용자가 불필요하게 데이터를 보는 것을 방지할 수 있습니다.

변경 관리

수천 개의 열에 마스킹 정책을 다시 적용하지 않고도 마스킹 정책의 내용을 편리하게 변경할 수 있습니다.

Dynamic Data Masking과 External Tokenization 사이의 이점 비교는 Column-level Security 이점 을 참조하십시오.

외부 토큰화 제한 사항

제한 사항에 대한 개요는 Column-level Security 제한 사항 을 참조하십시오.

외부 토큰화 고려 사항

추가적인 External Tokenization 고려 사항은 Column-level Security 고려 사항 을 참조하십시오.

외부 토큰화 권한 및 종속성

다음 테이블은 External Tokenization 마스킹 정책과 관련된 권한을 요약하여 보여줍니다.

권한

사용법

CREATE

스키마에서 새 마스킹 정책을 생성할 수 있습니다.

APPLY

열에서 마스킹 정책 에 대한 설정 해제 및 설정 작업을 실행할 수 있습니다.

전역 APPLY MASKING POLICY 권한(즉, ACCOUNT의 APPLY MASKING POLICY)을 부여하면 테이블과 뷰에서 DESCRIBE 작업을 실행할 수 있습니다.

구문 예제는 마스킹 정책 권한 섹션을 참조하십시오.

OWNERSHIP

마스킹 정책에 대한 모든 권한을 부여합니다. 마스킹 정책의 대부분 속성을 변경하려면 필요합니다. 특정 오브젝트에 대해 한 번에 단 하나의 역할만 이 권한을 보유할 수 있습니다.

참고

또한, 마스킹 정책 관련 작업을 수행하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.

외부 토큰화 마스킹 정책에는 API 통합을 활용하는 외부 함수가 필요하므로, 다음 테이블은 사용자 지정 역할(예: MASKING_ADMIN)이 보유해야 하는 Snowflake 오브젝트에 대한 권한을 요약하여 보여줍니다. 이러한 권한은 사용자 지정 역할에만 적용되며 마스킹 정책을 사용하여 열을 쿼리하는 사용자 역할에는 필요하지 않다는 점에 유의하십시오.

사용자 지정 역할

권한

오브젝트

외부 토큰화 정책 소유자

USAGE

외부 함수

외부 함수 소유자(즉, 외부 함수에 대한 OWNERSHIP 권한이 있는 역할)

USAGE

외부 함수에서 참조하는 모든 API 통합 오브젝트입니다.

External Tokenization DDL

External Tokenization 정책을 관리하기 위해 Snowflake가 제공하는 명령 세트는 다음과 같습니다.

Auditing External Tokenization

Snowflake는 마스킹 정책에 대한 정보를 얻기 위해 다음 2개의 Account Usage 뷰를 제공합니다.

  • MASKING POLICIES 뷰는 Snowflake 계정에서의 모든 마스킹 정책 목록을 제공합니다.

  • POLICY_REFERENCES 뷰는 마스킹 정책이 설정된 모든 오브젝트의 목록을 제공합니다.

Information Schema 테이블 함수 POLICY_REFERENCES 를 사용하면 다음을 수행할 수 있습니다.

  • 열에 마스킹 정책이 설정된 모든 오브젝트(즉, 테이블, 뷰)의 목록을 반환합니다.

  • 지정된 오브젝트 이름과 오브젝트 타입이 있는 정책 연결 목록을 반환합니다.

Snowflake는 내역 페이지 (웹 인터페이스)에 사용자가 실행한 원본 쿼리를 기록합니다. 이러한 쿼리는 SQL Text 열에서 확인할 수 있습니다.

특정 쿼리에서 사용된 마스킹 정책 이름은 쿼리 프로필 에서 확인할 수 있습니다.

쿼리 내역은 Account Usage QUERY_HISTORY 뷰에만 해당합니다. 이 뷰에서 Query Text 열에는 SQL 문의 텍스트가 포함되어 있습니다. 마스킹 정책 이름은 QUERY_HISTORY 뷰에 포함되어 있지 않습니다.

External Tokenization 문제 해결

오류 메시지를 사용하여 마스킹 정책 관련 문제를 해결할 수 있습니다.

오류 메시지

다음 테이블은 마스킹 정책을 사용하는 동안 Snowflake에서 반환될 수 있는 오류 메시지를 설명합니다.

동작

오류 메시지

문제 해결 작업

Snowflake 기능에 마스킹 정책을 적용할 수 없습니다.

지원되지 않는 기능 CREATE ON MASKING POLICY COLUMN.

현재 마스킹 정책을 이 기능에 적용할 수 없습니다.

활성 역할은 마스킹 정책을 생성하거나 바꿀 수 없습니다.

SQL 액세스 제어 오류: <계정_이름> 계정에 대한 작업 권한이 충분하지 않습니다.

grant create masking policy on account to role <role_name>; 을 사용하여 지정된 역할에 CREATE MASKING POLICY 권한을 부여하십시오. . show grants to role <role_name> 을 사용하여 역할에 권한이 있는지 확인하고 CREATE OR REPLACE 마스킹 문을 다시 시도하십시오.

지정된 역할은 마스킹 정책을 테이블에 연결할 수 없습니다.

SQL 컴파일 오류: <데이터베이스_이름> 데이터베이스가 없거나 권한이 없습니다.

grant apply masking policy on account to role <role_name>; 을 사용하여 역할에 APPLY MASKING POLICY 권한을 부여하십시오.

테이블에 대한 마스킹 정책을 소유하지 않는 지정된 역할이 사용할 수 있는 테이블에 마스킹 정책을 적용하려고 합니다.

SQL 컴파일 오류: <정책_이름> 마스킹 정책이 없거나 권한이 없습니다.

grant apply on masking policy <policy_name> to role <role_name>; 을 사용하여 마스킹 정책에 지정된 역할 사용을 부여하십시오.

drop masking policy <policy_name>; 을 사용하여 정책을 삭제 또는 제거할 수 없습니다.

SQL 컴파일 오류: <정책_이름> 정책이 1개 이상의 엔터티와 연결되어 있으므로 삭제/교체할 수 없습니다.

ALTER TABLE … MODIFY COLUMN 또는 ALTER VIEW … MODIFY COLUMN 문을 사용하여 우선 정책을 UNSET하고 문의 DROP을 다시 시도하십시오.

삭제된 테이블을 복원하면 마스킹 정책 오류가 발생합니다.

SQL 실행 오류: <열_이름> 열이 존재하지 않는 마스킹 정책에 이미 연결되어 있습니다. 정책 관리자에게 문의하십시오.

ALTER 테이블/뷰 MODIFY COLUMN 문을 사용하여 현재 연결된 마스킹 정책을 해제하고 CREATE OR REPLACE 문을 사용하여 열에 마스킹 정책을 다시 적용하십시오.

특정 열에는 마스킹 정책을 적용할 수 없지만, 다른 열에는 마스킹 정책을 적용할 수 있습니다.

지정된 열이 이미 다른 정책에 연결되어 있습니다. 여러 마스킹 정책에 열을 연결할 수 없습니다. 새 마스킹 정책을 연결하려면 현재 연결을 삭제하십시오.

열에 적용할 마스킹 정책을 결정하고 업데이트한 후 다시 시도하십시오.

ALTER 문을 사용한 정책 업데이트가 실패합니다.

SQL 컴파일 오류: <정책_이름> 마스킹 정책이 없거나 권한이 없습니다.

show masking policies; 를 실행하여 ALTER 명령의 정책 이름이 기존 정책과 일치하는지 확인합니다.

복제된 테이블을 소유한 역할이 마스킹 정책의 설정을 해제할 수 없습니다.

SQL 액세스 제어 오류: ALTER TABLE UNSET MASKING POLICY 〈<정책_이름>〉에 대한 작업 권한이 충분하지 않습니다.

grant apply on masking policy <policy_name> to role <role_name>; 을 사용하여 복제된 테이블을 소유한 역할에 APPLY 권한을 부여하십시오. . show grants to role <role_name>; 을 사용하여 복제된 테이블을 소유한 역할에 권한이 부여되었는지 확인하고 ALTER 문을 다시 시도하십시오.

IF EXISTS를 사용하여 정책을 업데이트하면 성공적인 결과가 반환되지만, 정책이 업데이트되지 않습니다.

오류 메시지가 반환되지 않았습니다. Snowflake는 실행이 성공한 문을 반환합니다.

ALTER 문에서 IF EXISTS를 제거하고 다시 시도하십시오.

마스킹 정책을 생성하거나 CASE를 사용하여 교체하는 동안 데이터 타입이 일치하지 않습니다(예: (VAL 문자열) -> 숫자 반환).

SQL 컴파일 오류: 마스킹 정책 함수의 인자와 반환 타입이 일치하지 않습니다.

CREATE OR REPLACE 문 또는 ALTER MASKING POLICY 문을 사용하여 일치하는 데이터 타입이 포함된 CASE를 사용하여 마스킹 정책을 업데이트하십시오.

가상 열에 마스킹 정책을 적용합니다.

SQL 컴파일 오류: 마스킹 정책은 VIRTUAL_COLUMN 열에 연결할 수 없습니다.

소스 테이블의 열에 마스킹 정책을 적용하십시오.

구체화된 뷰에 마스킹 정책을 적용합니다.

SQL 컴파일 오류: <숫자> 위치의 <숫자> 구문 오류 라인이 예기치 않게 〈수정되었습니다〉. . SQL 컴파일 오류: <숫자> 위치의 <숫자> 오류 라인에서 유효하지 않은 〈<문자>〉 식별자 . SQL 실행 오류: 테이블에 1개 이상의 구체화된 뷰가 있습니다. mvs의 수=<숫자>, 테이블 이름=<테이블_이름>.

원본 테이블의 열에 마스킹 정책을 적용하십시오. 자세한 내용은 제한 사항 섹션을 참조하십시오.

구체화된 뷰를 생성하기 위해 사용되는 테이블 열에 마스킹 정책을 적용합니다.

SQL 컴파일 오류: 마스킹 정책은 MATERIALIZED_VIEW 열에 연결할 수 없습니다.

테이블 열에 마스킹 정책을 적용하려면 구체화된 뷰를 삭제하십시오.

구체화된 뷰를 생성하는 동안 마스킹된 열을 포함합니다.

지원되지 않는 기능 〈CREATE ON MASKING POLICY COLUMN〉.

마스킹된 열을 포함하지 않고 구체화된 뷰를 생성하거나 또는 기본 테이블 또는 뷰에 마스킹 정책을 설정하지 않고 구체화된 뷰를 생성한 후 마스킹 정책을 구체화된 뷰 열에 적용하십시오.

마스킹 정책 본문에서 사용자 정의 함수(UDF)를 사용하여 마스킹 정책을 생성할 수 없습니다.

SQL 액세스 제어 오류: 〈<udf_이름>〉 함수에서 작업을 수행할 권한이 충분하지 않습니다.

마스킹 정책을 생성하는 역할에 UDF에 대한 USAGE 권한이 있는지 확인하십시오.

다음 항목: