Computer >> 컴퓨터 >  >> 프로그래밍 >> 데이터베이스

Oracle EBS R12에서 TDE(투명한 데이터 암호화) 컬럼 레벨 암호화 구현 가이드

이 글에서는 Oracle® E-Business Suite®(EBS) R12 환경에서 TDE(Transparent Data Encryption, 투명한 데이터 암호화)의 컬럼 레벨 암호화를 설정하는 방법을 다룹니다. 사용자 요구 사항에 따라 단일 컬럼 또는 다중 컬럼 테이블에 대해 컬럼 레벨 암호화를 구성할 수 있습니다.

소개

TDE 컬럼 암호화 기능을 활용하면 테이블에서 선택한 특정 컬럼만 암호화할 수 있습니다. 암호화가 투명하게 이루어지기 때문에 애플리케이션 코드를 다시 작성할 필요 없이 기존 코드를 그대로 사용할 수 있습니다. '투명하다'는 의미에는 데이터베이스 세션이 암호화된 데이터를 아무런 문제 없이 읽을 수 있다는 뜻도 포함됩니다.

이 글의 절차를 따라 하면 EBS R12 환경에서 TDE 컬럼 레벨 암호화를 손쉽게 구축할 수 있습니다.

TDE 도입 시 영향

TDE 암호화 구현은 애플리케이션의 다음 측면에 영향을 미칠 수 있으므로 사전 검토가 필요합니다.

  • 성능: TDE 구현에는 일정한 제약 사항이 있으며, 이 내용은 Advanced Security Guide에 문서화되어 있습니다. TDE를 적용하기 전에 반드시 해당 문서를 검토해야 합니다. 또한 어떤 컬럼을 암호화할지 신중하게 선택해야 합니다. 컬럼 선택은 해당 암호화 컬럼을 사용하는 DML(Data Manipulation Language) 및 기타 쿼리의 성능에 직접적인 영향을 미치기 때문입니다.
  • 패칭(Patching): 사용 가능한 EBS 패치, 특히 TDE로 암호화된 컬럼에 변경 사항을 적용하는 패치를 주의 깊게 살펴야 합니다. 여기에는 암호화된 컬럼에 인덱스를 추가하는 등의 변경도 포함됩니다.

TDE의 제약 사항

TDE 컬럼 암호화는 Streams나 논리 스탠바이(logical standby) 모드의 DataGuard와 같은 Oracle LogMiner 기반 기술에서는 지원되지 않습니다. 이러한 기술을 사용 중이라면 암호화된 컬럼을 복제할 수 없습니다. 반면, DataGuard를 물리 스탠바이(physical standby) 모드로 사용하는 경우에는 TDE 암호화가 지원됩니다. 이 경우 아래 이미지와 같이 마스터 키가 담긴 월렛(wallet) 파일을 프라이머리 서버에서 물리 스탠바이 서버로 복사해야 합니다.

Oracle EBS R12에서 TDE(투명한 데이터 암호화) 컬럼 레벨 암호화 구현 가이드
이미지 출처: https://docs.oracle.com/cd/E11882_01/network.112/e40393/asotrans.htm#ASOAG9567

TDE 구현 절차

다음 단계에 따라 TDE를 구현합니다.

  1. 암호화 대상 목록 확보: 암호화가 필요한 컬럼과 테이블 목록을 먼저 작성합니다.
  2. 월렛 폴더 생성: 지정한 위치에 다음 명령어로 월렛 폴더를 생성합니다.
    $ mkdir TDEWallet
    
  3. sqlnet.ora 설정: sqlnet.ora 또는 sqlnet_ifile.ora 파일에 아래와 유사한 항목을 추가합니다.
    [oratactp@odbprod1 tactprd_odbprod1]$ cat sqlnet_ifile.ora
    
  4. 마스터 키 설정: 다음 명령어로 마스터 키를 설정합니다. 이 명령은 앞 단계에서 지정한 월렛 위치에 월렛 파일을 생성합니다.
    $ Sqlplus '/as sysdba'
    SQL> ALTER SYSTEM SET ENCRYPTION KEY IDENTIFIED BY "*****";
    System altered.
    
  5. EBS 패치 적용: 패치 7337863이 아직 적용되지 않았다면 다운로드하여 적용합니다.
  6. aftdeval.sql 실행: AppsTier에서 $FND_TOP/sql 경로의 aftdeval.sql을 암호화 대상 테이블 또는 컬럼에 대해 실행합니다. 아래는 실행 예시입니다.
    SQL> @aftdeval.sql IBY IBY_CREDITCARD CCNUMBER E
    
  7. 암호화 명령 실행: aftdeval.sql이 생성한 모든 암호화 명령을 실행합니다.
  8. 암호화 결과 확인: 다음 명령어로 컬럼이 정상적으로 암호화되었는지 검증합니다.
    SQL> SELECT * FROM DBA_ENCRYPTED_COLUMNS;
    
    OWNER      TABLE_NAME                COLUMN_NAME          ENCRYPTION_ALG       SAL INTEGRITY_AL
    ---------- ------------------------- -------------------- -------------------- --- ------------
    IBY        IBY_CREDITCARD            CCNUMBER             AES 192 bits key     NO SHA-1
    
  9. 월렛 열기/닫기: 다음 명령어로 월렛을 열거나 닫을 수 있습니다.
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET CLOSE IDENTIFIED BY "****";
    SQL> SELECT * FROM v$encryption_wallet;
    
    SQL> ALTER SYSTEM SET ENCRYPTION WALLET OPEN IDENTIFIED BY "****";
    
  10. 자동 로그인 설정(선택): 다음 명령어로 월렛에 자동 로그인(auto login)을 설정할 수 있습니다.
    $ orapki wallet create -wallet <wallet_location> -auto_login
    

TDE 구현 시 적용되는 제한 조건

TDE 구현에는 다음과 같은 제한 조건이 적용됩니다.

  • 특정 데이터 타입만 암호화할 수 있습니다.
  • 3932바이트 미만으로 정의된 컬럼만 암호화할 수 있습니다.
  • 외래 키(foreign key)에 포함되거나 다른 데이터베이스 제약 조건에서 사용되는 컬럼은 암호화할 수 없습니다.
  • 컬럼에 함수 기반 인덱스(function-based index)가 존재하면 암호화할 수 없습니다.
  • 인덱스가 생성된 컬럼을 암호화하면 해당 컬럼에 대한 범위 스캔(range scan) 시 더 이상 인덱스가 사용되지 않고, 대신 전체 테이블 스캔(full table scan)이 수행됩니다.
  • 파티션된 테이블에서 파티션 또는 서브파티션이 교환(exchange)되는 경우, 해당 테이블의 모든 파티션이 동일하게 암호화되어 있어야 합니다. 현재 이 조건에 해당하는 테이블은 다음과 같습니다.
    • EGO_MTL_SY_ITEMS_EXT_B
    • EGO_MTL_SY_ITEMS_EXT_TL
    • WF_LOCAL_ROLES
    • WF_LOCAL_ROLES_STAGE
    • WF_USER_ROLE_ASSIGNMENTS
    • WF_UR_ASSIGNMENTS_STAGE
    • WF_LOCAL_USER_ROLES
    • WF_LOCAL_USER_ROLES_STAGE
    • WF_LOCAL_ROLES_TL
    • WF_LOCAL_ROLES_TL_STAGE

롤백(Back Out) 계획

컬럼 암호화가 더 이상 필요하지 않다면, 다음 명령어를 롤백 계획으로 실행합니다.

SQL> ALTER TABLE IBY.IBY_CREDITCARD modify (CCNUMBER decrypt); << 암호화했던 모든 컬럼/테이블에 대해 반복 실행

sqlnet_ifile.ora에서 ENCRYPTION_WALLET_LOCATION 항목 주석 처리

위 명령어 실행 후에는 환경을 재시작하고 전체 정상 동작(sanity) 테스트를 수행해야 합니다.

결론

컬럼 레벨에서 TDE를 구현하면 신용카드 번호나 인사(HR) 데이터처럼 컬럼에 저장된 민감한 정보를 사용자가 직접 보는 것을 방지할 수 있습니다. 또한 암호화 적용 후에도 애플리케이션 코드를 다시 작성할 필요가 없습니다. 기존 코드를 그대로 활용할 수 있으며, 데이터베이스 세션은 암호화된 데이터를 문제없이 처리합니다.

궁금한 점이나 의견이 있다면 피드백 탭을 통해 남겨주세요. 자세한 내용은 데이터베이스 서비스 페이지에서 확인하실 수 있습니다.