본문 바로가기
Data & Programming/Oracle

[오라클-팁] 비정형 데이터 컬럼에서 실명번호 찾기

by 눈부셔™ 2023. 7. 10.
728x90

 

[Oracle-TIP] 비정형 데이터 컬럼에서 실명번호 찾기

비정형 데이터 컬럼에서 실명번호(주민번호) 찾기

개인정보 보호법에 따라 DB원장의 실명번호는 모두 암호화 되어 저장되고 있습니다.

대외전문관리 테이블의 경우, 전문전체를 통으로 보관하는 비정형 컬럼도 존재하는데, 보통 실명번호 부분만 암호화해서 저장하고 대외에 송신시에는 복호화해서 전송합니다.

하지만 금융권에서 운영업무를 하다보면, 통합단말의 비고란 같은 항목에 텔러가 관리차원에서 실명번호를 기입히는 경우, 테이블에 암호화되지 않고 저장되는 경우가 있습니다.

이런 경우, 해당 레코드들을 찾아서 강제로 암호화 작업을 수행해 줘야하는데..

 

비정형 데이터 컬럼에서 실명번호를 찾기 위해서는 정규 표현식을 활용하는 방법이 일반적입니다.
정규표현식은 문자열에서 패턴을 찾거나 매칭시킬 때 사용하는 강력한 도구입니다. 
오라클에서는 'REGEXP_LIKE' 함수를 사용하여 정규 표현식을 적용할 수 있습니다.

다음은 비정형 데이터 컬럼에서 실명번호를 찾는 예시입니다.

SELECT *
   FROM 테이블명
WHERE REGEXP_LIKE(컬럼명, '^[0-9]{2}(0[1-9]|1[012])(0[1-9]|1[0-9]|2[0-9]|3[01])-?[012349][0-9]{6}')

위의 쿼리에서 "테이블명"은 실제 데이터가 저장된 테이블 이름이고,

"컬럼명"은 비정형 데이터를 보관하는 컬럼 이름입니다.
정규표현식 '^[0-9]{2}(0[1-9]|1[012])(0[1-9]|1[0-9]|2[0-9]|3[01])-?[012349][0-9]{6}' 은 실명번호 패턴을 나타냅니다.

  ● ^[0-9]{2} : 0부터 9까지의 숫자 2자리로 시작
  ● (0[1-9]|1[012]) : (0과 1부터 9까지의 숫자 2자리) 또는 (1과 0부터 3까지의 숫자 2자리)
  ● (0[1-9]|1[0-9]|2[0-9]|3[01]) : (0과 1부터 9까지의 숫자 2자리) 또는 (1과 0부터 9까지의 숫자 2자리) 또는 

                                                 (2와 0부터 9까지의 숫자 2자리) 또는 (3과 0부터 1까지의 숫자 2자리)
  ● -? : 하이픈(-)은 있어도 되고 없어도 되고
  ● [012349] : 0, 1, 2, 3, 4, 9 숫자 중 하나
  ● [0-9]{6} : 0부터 9까지 숫자 6자리

참고로 위에서 실명번호 체크디지트 검증은 생략했습니다. 필요하신 분 있으시면, 추가로 알려드리겠습니다.
비정형 데이터는 구조가 없는 형태이기 때문에 데이터를 신중하게 분석해야 합니다. 
정확한 패턴에 기반하여 정규 표현식을 작성하고, 실제 데이터와 일치하는 패턴을 찾을 수 있도록 적절한 패턴을 사용해야 합니다.
또한, 개인정보 보호 및 데이터 보안을 위해 적절한 접근 권한과 데이터 암호화 등의 보안조치를 적용해야 합니다.

728x90