메인 콘텐츠로 건너뛰기
마스킹 정책을 생성합니다. 이 정책을 사용하면 특정 사용자 또는 역할이 테이블을 쿼리할 때 컬럼 값을 동적으로 변환하거나 마스킹할 수 있습니다.
마스킹 정책은 저장된 데이터를 수정하지 않고도 쿌리 시점에 민감한 데이터를 변환하여 컬럼 수준의 데이터 보안을 제공합니다.
구문:
CREATE MASKING POLICY [IF NOT EXISTS | OR REPLACE] policy_name ON [database.]table
    UPDATE column1 = expression1 [, column2 = expression2 ...]
    [WHERE condition]
    TO {role1 [, role2 ...] | ALL | ALL EXCEPT role1 [, role2 ...]}
    [PRIORITY priority_number]

UPDATE 절

UPDATE 절은 마스킹할 컬럼과 변환 방법을 지정합니다. 하나의 정책에서 여러 컬럼을 마스킹할 수 있습니다. 예시:
  • 단순 마스킹: UPDATE email = '***masked***'
  • 부분 마스킹: UPDATE email = concat(substring(email, 1, 3), '***@***.***')
  • 해시 기반 마스킹: UPDATE email = concat('masked_', substring(hex(cityHash64(email)), 1, 8))
  • 여러 컬럼: UPDATE email = '***@***.***', phone = '***-***-****'

WHERE 절

선택적 WHERE 절을 사용하면 행 값에 따라 조건부 마스킹을 적용할 수 있습니다. 조건에 일치하는 행에만 마스킹이 적용됩니다. 예시:
CREATE MASKING POLICY mask_high_salaries ON employees
UPDATE salary = 0
WHERE salary > 100000
TO analyst;

TO 절

TO 섹션에서는 정책을 적용할 사용자와 역할을 지정합니다.
  • TO user1, user2: 특정 사용자/역할에 적용
  • TO ALL: 모든 사용자에게 적용
  • TO ALL EXCEPT user1, user2: 지정한 사용자를 제외한 모든 사용자에게 적용
행 정책(row policies)과 달리, 마스킹 정책(masking policies)은 정책이 적용되지 않는 사용자에게는 영향을 주지 않습니다. 사용자에게 적용되는 마스킹 정책이 없으면 원본 데이터를 보게 됩니다.

PRIORITY 절

여러 마스킹 정책이 동일한 사용자의 같은 컬럼을 대상으로 할 때 PRIORITY 절이 적용 순서를 결정합니다. 정책은 우선순위가 높은 것부터 낮은 것 순으로 적용됩니다. 기본 우선순위는 0입니다. 우선순위가 같은 정책은 순서가 정의되지 않은 상태로 적용됩니다. 예시:
-- 두 번째로 적용됨 (낮은 우선순위)
CREATE MASKING POLICY mask1 ON users
UPDATE email = 'low@priority.com'
TO analyst
PRIORITY 1;

-- 첫 번째로 적용됨 (높은 우선순위)
CREATE MASKING POLICY mask2 ON users
UPDATE email = 'high@priority.com'
TO analyst
PRIORITY 10;

-- analyst는 마지막에 적용되기 때문에 'low@priority.com'을 보게 됨
성능 고려 사항
  • 마스킹 정책은 표현식의 복잡도에 따라 쿼리 성능에 영향을 미칠 수 있습니다
  • 활성화된 마스킹 정책이 있는 테이블(table)에서는 일부 최적화가 비활성화될 수 있습니다
마지막 수정일 2026년 6월 10일