Dynamic Data Masking 이해하기¶
이 항목에서는 Dynamic Data Masking 기능에 대한 일반적인 개요를 제공합니다.
태그와 함께 마스킹 정책을 사용하는 방법에 대해 자세히 알아보려면 태그 기반 마스킹 정책 섹션을 참조하십시오.
Dynamic Data Masking이란 무엇입니까?¶
동적 데이터 마스킹은 쿼리 시간에 테이블 및 뷰 열에 있는 일반 텍스트 데이터를 선별적으로 마스킹하는 마스킹 정책을 사용하는 열 수준 보안 기능입니다.
Snowflake에서 마스킹 정책은 스키마 수준 오브젝트입니다. 즉, 마스킹 정책을 열에 적용하려면 데이터베이스 및 스키마가 Snowflake에 있어야 합니다. 현재 Snowflake는 테이블 및 뷰에서 Dynamic Data Masking을 사용하는 것을 지원합니다.
쿼리 런타임 시점에, 열이 표시되는 모든 위치의 열에 마스킹 정책이 적용됩니다. 마스킹 정책 조건, SQL 실행 컨텍스트 및 역할 계층 구조에 따라, Snowflake 쿼리 연산자는 일반 텍스트 값, 부분적으로 마스킹된 값 또는 완전히 마스킹된 값을 볼 수 있습니다.
쿼리 런타임 동작, 정책 생성, 테이블 및 뷰와 함께 사용, 마스킹 정책을 사용한 관리 방식 등 마스킹 정책이 작동하는 방식에 대한 자세한 내용은 Column-level Security 이해하기 를 참조하십시오.
SQL 실행 컨텍스트 및 역할 계층 구조의 영향에 대한 자세한 내용은 고급 열 수준 보안 항목 을 참조하십시오.
동적 데이터 마스킹의 이점¶
다음은 Dynamic Data Masking의 주요 이점 중 일부를 요약하여 보여줍니다.
- 사용 편의성:
정책은 한 번 작성하면 데이터베이스와 스키마 전체에서 수천 개의 열에 적용할 수 있습니다.
- 데이터 관리 및 SoD:
보안 또는 개인정보보호 담당자는 오브젝트 소유자가 아닌 보호할 열을 결정합니다. 마스킹 정책은 관리가 쉽고 중앙 집중식 및 분산형 관리 모델을 지원합니다.
- 데이터 인증 및 거버넌스:
역할 또는 사용자 지정 권한에 따라 컨텍스트 데이터에 액세스합니다.
보안 또는 개인정보보호 담당자가 구현한 데이터 거버넌스를 지원하며, ACCOUNTADMIN 또는 SECURITYADMIN 역할의 권한이 부여된 사용자가 불필요하게 데이터를 보는 것을 방지할 수 있습니다.
- 데이터 공유:
편리하게 데이터를 마스킹한 후 공유할 수 있습니다.
- 변경 관리:
수천 개의 열에 마스킹 정책을 다시 적용하지 않고도 마스킹 정책의 내용을 편리하게 변경할 수 있습니다.
Dynamic Data Masking과 External Tokenization 사이의 이점 비교는 Column-level Security 이점 을 참조하십시오.
동적 데이터 마스킹 제한 사항¶
제한 사항에 대한 개요는 Column-level Security 제한 사항 을 참조하십시오.
동적 데이터 마스킹 고려 사항¶
추가적인 Dynamic Data Masking 고려 사항은 Column-level Security 고려 사항 을 참조하십시오.
동적 데이터 마스킹 권한¶
다음 테이블은 Dynamic Data Masking과 관련된 권한을 요약하여 보여줍니다.
권한 |
사용법 |
---|---|
CREATE |
스키마에서 새 마스킹 정책을 생성할 수 있습니다. |
APPLY |
열에서 마스킹 정책 에 대한 설정 해제 및 설정 작업을 실행할 수 있습니다. 전역 APPLY MASKING POLICY 권한(즉, ACCOUNT의 APPLY MASKING POLICY)을 부여하면 테이블과 뷰에서 DESCRIBE 작업을 실행할 수 있습니다. 구문 예제는 마스킹 정책 권한 섹션을 참조하십시오. |
OWNERSHIP |
마스킹 정책에 대한 모든 권한을 부여합니다. 마스킹 정책의 대부분 속성을 변경하려면 필요합니다. 특정 오브젝트에 대해 한 번에 단 하나의 역할만 이 권한을 보유할 수 있습니다. |
참고
또한, 마스킹 정책 관련 작업을 수행하려면 상위 데이터베이스 및 스키마에 대한 USAGE 권한도 필요합니다.
Dynamic Data Masking DDL¶
Dynamic Data Masking 정책을 관리하기 위해 Snowflake가 제공하는 명령 세트는 다음과 같습니다.
Dynamic Data Masking 감사하기¶
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 뷰에 포함되어 있지 않습니다.
Dynamic Data Masking 문제 해결¶
오류 메시지를 사용하여 마스킹 정책 관련 문제를 해결할 수 있습니다.
오류 메시지¶
다음 테이블은 마스킹 정책을 사용하는 동안 Snowflake에서 반환될 수 있는 오류 메시지를 설명합니다.
동작 |
오류 메시지 |
문제 해결 작업 |
---|---|---|
Snowflake 기능에 마스킹 정책을 적용할 수 없습니다. |
지원되지 않는 기능 |
현재 마스킹 정책을 이 기능에 적용할 수 없습니다. |
활성 역할은 마스킹 정책을 생성하거나 바꿀 수 없습니다. |
SQL 액세스 제어 오류: <계정_이름> 계정에 대한 작업 권한이 충분하지 않습니다. |
|
지정된 역할은 마스킹 정책을 테이블에 연결할 수 없습니다. |
SQL 컴파일 오류: <데이터베이스_이름> 데이터베이스가 없거나 권한이 없습니다. |
|
테이블에 대한 마스킹 정책을 소유하지 않는 지정된 역할이 사용할 수 있는 테이블에 마스킹 정책을 적용하려고 합니다. |
SQL 컴파일 오류: <정책_이름> 마스킹 정책이 없거나 권한이 없습니다. |
|
|
SQL 컴파일 오류: <정책_이름> 정책이 1개 이상의 엔터티와 연결되어 있으므로 삭제/교체할 수 없습니다. |
ALTER TABLE … MODIFY COLUMN 또는 ALTER VIEW … MODIFY COLUMN 문을 사용하여 우선 정책을 UNSET하고 문의 DROP을 다시 시도하십시오. |
삭제된 테이블을 복원하면 마스킹 정책 오류가 발생합니다. |
SQL 실행 오류: <열_이름> 열이 존재하지 않는 마스킹 정책에 이미 연결되어 있습니다. 정책 관리자에게 문의하십시오. |
ALTER 테이블/뷰 MODIFY COLUMN 문을 사용하여 현재 연결된 마스킹 정책을 해제하고 CREATE OR REPLACE 문을 사용하여 열에 마스킹 정책을 다시 적용하십시오. |
특정 열에는 마스킹 정책을 적용할 수 없지만, 다른 열에는 마스킹 정책을 적용할 수 있습니다. |
지정된 열이 이미 다른 정책에 연결되어 있습니다. 여러 마스킹 정책에 열을 연결할 수 없습니다. 새 마스킹 정책을 연결하려면 현재 연결을 삭제하십시오. |
열에 적용할 마스킹 정책을 결정하고 업데이트한 후 다시 시도하십시오. |
ALTER 문을 사용한 정책 업데이트가 실패합니다. |
SQL 컴파일 오류: <정책_이름> 마스킹 정책이 없거나 권한이 없습니다. |
|
복제된 테이블을 소유한 역할이 마스킹 정책의 설정을 해제할 수 없습니다. |
SQL 액세스 제어 오류: ALTER TABLE UNSET MASKING POLICY ‘<정책_이름>’에 대한 작업 권한이 충분하지 않습니다. |
|
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 권한이 있는지 확인하십시오. |
다음 항목: