CREATE MASKING POLICY
CREATE MASKING POLICY
특정 사용자나 역할이 테이블을 쿼리할 때 컬럼 값을 동적으로 변환하거나 마스킹할 수 있게 하는 마스킹 정책(masking policy)을 만들어요.
마스킹 정책은 저장된 데이터를 수정하지 않고 쿼리 시점에 민감한 데이터를 변환함으로써 컬럼 수준의 데이터 보안을 제공해요.
출처: 문서
본문
Syntax:
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 Clause
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 Clause
선택 사항인 WHERE 절은 행 값에 기반한 조건부 마스킹을 허용해요. 조건과 일치하는 행만 마스킹이 적용됩니다.
예시:
CREATE MASKING POLICY mask_high_salaries ON employees
UPDATE salary = 0
WHERE salary > 100000
TO analyst;
TO Clause
TO 섹션에서 정책이 적용되어야 할 사용자와 역할을 지정해요.
TO user1, user2: 특정 사용자/역할에 적용TO ALL: 모든 사용자에 적용TO ALL EXCEPT user1, user2: 지정된 것 제외한 모든 사용자에 적용
행 정책과 달리 마스킹 정책은 정책이 적용되지 않은 사용자에 영향을 주지 않아요. 사용자에게 적용되는 마스킹 정책이 없으면 원본 데이터를 봅니다.
PRIORITY Clause
여러 마스킹 정책이 한 사용자에 대해 같은 컬럼을 대상으로 할 때, PRIORITY 절이 적용 순서를 결정해요. 정책은 높은 우선순위에서 낮은 우선순위 순서로 적용됩니다.
기본 우선순위는 0이에요. 같은 우선순위의 정책은 정의되지 않은 순서로 적용됩니다.
예시:
-- Applied second (lower priority)
CREATE MASKING POLICY mask1 ON users
UPDATE email = '[email protected]'
TO analyst
PRIORITY 1;
-- Applied first (higher priority)
CREATE MASKING POLICY mask2 ON users
UPDATE email = '[email protected]'
TO analyst
PRIORITY 10;
-- analyst sees '[email protected]' because it's applied last
Performance Considerations
- 마스킹 정책은 표현식의 복잡성에 따라 쿼리 성능에 영향을 줄 수 있어요.
- 활성 마스킹 정책이 있는 테이블에서는 일부 최적화가 비활성화될 수 있어요.