반응형
외부에서 접근 시에 민감한 정보를 일부 가리기 위한 방법으로 마스킹 처리가 있습니다. 간단하게 이름, 이메일, 전화번호 등을 마스킹 처리하는 방법에 대해서 알아보겠습니다.
1️⃣ 앞 3자리만 남기고 나머지를 *로 변환
SELECT CONCAT(LEFT(user_id, 3), REPEAT('*', LENGTH(user_id) - 3)) AS masked_user_id FROM dual;
user_id | masked_user_id |
abcdefgh | abc***** |
2️⃣ 중간 부분을 *로 변환
SELECT CONCAT(LEFT(user_id, 2), REPEAT('*', LENGTH(user_id) - 4), RIGHT(user_id, 2)) AS masked_user_id FROM dual;
user_id | masked_user_id |
abcdefgh | ab***fg |
3️⃣ 전화번호
SELECT CONCAT(LEFT(phone, 4), '****', RIGHT(phone, 5)) AS masked_phone FROM dual;
phone | masked_phone |
010-1234-5678 | 010-****-5678 |
4️⃣ 이메일
SELECT CONCAT(LEFT(email, 2), REPEAT('*', LOCATE('@', email) - 3), SUBSTRING(email, LOCATE('@', email))) AS masked_email FROM dual;
masked_email | |
abcde@example.com | ab***@example.com |
🎯 결론
- 100만 건 이내에서는 큰 성능 차이는 없음 (조회 시 0.3~0.7초)
- 대량 데이터(수백만~수천만 건)에서는 미리 컬럼을 만들어 저장하는 게 유리
- 인덱스가 필요하면 SQL에서 마스킹하지 말고, 애플리케이션에서 처리하는 것이 좋음
반응형
'개발 & 데이터베이스 > DB' 카테고리의 다른 글
MySQL AUTO INCREMENT 조회 및 초기화 (0) | 2025.02.03 |
---|---|
MySQL 권한 부여하는 방법 (GRANT) (0) | 2024.11.04 |
Oracle vs MySQL 데이터 타입 비교 (0) | 2024.09.23 |
오라클 조건문 IF ELSIF, CASE WHEN 사용 방법 (0) | 2023.12.03 |
오라클 쿼리문 수행(실행) 시간 측정하는 방법 (SET TIMING ON) (0) | 2023.10.24 |