소스 데이터베이스의 데이터 암호화

TDE(Transparent Data Encryption)Oracle Database의 유휴 데이터를 투명하게 암호화합니다. 응용 프로그램이 SQL을 사용하여 데이터에 액세스하는 방법에 영향을 주지 않고 운영 체제에서 파일에 저장된 데이터베이스 데이터에 액세스하려는 인증되지 않은 시도를 정지합니다. TDE는 Oracle Database와 완전히 통합되며 RMAN(전체 데이터베이스 백업), 데이터 펌프 익스포트, 전체 애플리케이션 테이블스페이스 또는 특정 중요한 열을 암호화할 수 있습니다. 암호화된 데이터는 테이블스페이스 저장 영역 파일, 임시 테이블스페이스, 실행 취소 테이블스페이스 또는 리두 로그와 같은 기타 파일에 있는지 여부에 관계없이 데이터베이스에서 암호화된 상태로 유지됩니다.

재해 복구의 경우 온-프레미스 및 Oracle Cloud Infrastructure 인스턴스의 비밀번호가 동일해야 합니다. 그렇지 않은 경우 sqlplus 명령을 사용하여 암호를 업데이트합니다.

TDE가 소스 데이터베이스에서 사용으로 설정되었는지 여부 확인

TDE(Transparent Data Encryption) 가 소스 데이터베이스에서 사용으로 설정되지 않은 경우 데이터베이스를 OCI(Oracle Cloud Infrastructure) 로 이전하거나 재해 복구 중에 데이터가 암호화되지 않습니다. 암호화되지 않은 데이터를 수동으로 암호화해야 합니다. OCI에서는 새 데이터가 자동으로 암호화됩니다.

  1. 테이블스페이스가 암호화되었는지 확인합니다.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    테이블스페이스가 암호화되지 않은 경우 출력은 다음과 같이 표시됩니다:

    TABLESPACE_NAME 	       		ENC
    ------------------------------ ---
    SYSTEM                          NO
    SYSAUX                          NO
    UNDOTBS1                        NO
    TEMP                            NO
    USERS			      NO
  2. 파일 시스템에서 연관된 데이터베이스 데이터 파일(. dbf) 을 찾습니다.
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    출력은 다음과 비슷합니다:

    TABLESPACE_NAME
    ------------------------------
    FILE_NAME
    
    SYSTEM
    /opt/oracle/oradata/ORCLCDB/system01.dbf
    
    SYSAUX
    /opt/oracle/oradata/ORCLCDB/sysaux01.dbf
    
    UNDOTBS1
    /opt/oracle/oradata/ORCLCDB/undotbs01.dbf
    
    USERS
    /opt/oracle/oradata/ORCLCDB/users01.dbf

소스 데이터베이스에서 TDE 암호화 사용

TDE(투명한 데이터 암호화) 를 사용하면 테이블 및 테이블스페이스에 저장된 중요한 데이터를 암호화할 수 있습니다. 암호화된 데이터는 데이터에 액세스할 수 있는 데이터베이스 사용자 또는 응용 프로그램에 대해 투명하게 해독됩니다.

  1. 소스 데이터베이스의 $ORACLE_BASE 디렉토리로 이동합니다.
    bash-4.2$ pwd
    /opt/oracle/admin/ORCLCDB
  2. wallet 라는 디렉토리를 생성합니다.
    $ mkdir wallet
  3. 영숫자 혼합을 사용하는 보안 비밀번호와 함께 전자 지갑을 생성합니다.
    이 단계에서는 전자 지갑을 생성하고 엽니다. 데이터베이스가 열린 후에는 전자 지갑이 명시적으로 닫히거나 데이터베이스가 종료될 때까지 전자 지갑이 열린 상태로 남아 있습니다. 그러면 전자 지갑이 자동으로 닫힙니다.
    SQL> alter system set encryption key identified by "wallet_password";
  4. 데이터베이스가 재시작된 후 닫힌 전자 지갑을 다시 엽니다.
    SQL> alter system set wallet open identified by "wallet_password";
  5. 테이블스페이스를 암호화합니다.
    다음 코드는 AES-128 암호화를 사용합니다.
    alter tablespace system encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/system01.dbf','/opt/oracle/oradata/ORCLCDB/system01_enc.dbf');
    
    alter tablespace sysaux encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/sysaux01.dbf','/opt/oracle/oradata/ORCLCDB/sysaux01_enc.dbf');
    
    alter tablespace undotbs1 encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/undotbs01.dbf','/opt/oracle/oradata/ORCLCDB/undotbs01_enc.dbf');
    
    alter tablespace users encryption online using 'aes128' encrypt file_name_convert=('/opt/oracle/oradata/ORCLCDB/users01.dbf','/opt/oracle/oradata/ORCLCDB/users01_enc.dbf');
    
  6. 테이블스페이스가 암호화되었는지 확인합니다.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    출력은 다음과 비슷합니다:

    TABLESPACE_NAME 	       ENC
    ------------------------------ ---
    SYSTEM			    YES
    SYSAUX			    YES
    UNDOTBS1                       YES
    TEMP			      NO
    USERS			     YES
  7. 파일 시스템의 연관된 데이터베이스 데이터 파일(. dbf) 이 암호화되었는지 확인합니다.
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    출력은 다음과 비슷합니다:

    TABLESPACE_NAME
    ------------------------------
    FILE_NAME
    
    SYSTEM
    /opt/oracle/oradata/ORCLCDB/system01_enc.dbf
    
    SYSAUX
    /opt/oracle/oradata/ORCLCDB/sysaux01_enc.dbf
    
    UNDOTBS1
    /opt/oracle/oradata/ORCLCDB/undotbs01_enc.dbf
    
    USERS
    /opt/oracle/oradata/ORCLCDB/users01_enc.dbf

소스 데이터베이스에 전자 지갑 생성

안전한 비밀번호와 함께 전자 지갑을 생성합니다.

  1. 기본 온-프레미스 데이터베이스의 노드 1에서 다음 명령을 실행하여 전자 지갑을 생성합니다:
    SQL>
            ADMINISTER KEY MANAGEMENT CREATE KEYSTORE '/u01/app/oracle/admin/db1/wallet/' IDENTIFIED BY
            "wallet-password";
    ADMINISTER KEY MANAGEMENT CREATE AUTO_LOGIN KEYSTORE FROM KEYSTORE
            '/u01/app/oracle/admin/db1/wallet/' IDENTIFIED BY "wallet-password";
    SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE
            OPEN IDENTIFIED BY "wallet-password";
    SQL> ADMINISTER KEY MANAGEMENT SET
            KEY USING TAG 'master_key' IDENTIFIED BY "wallet-password” WITH BACKUP USING
            'masterbackup';
    SQL> SELECT KEY_ID,creation_time,activation_time,tag FROM V$ENCRYPTION_KEYS;
  2. 암호화 전자 지갑 매개변수를 표시합니다.
    SQL> select * from v$encryption_wallet;

    출력은 다음과 유사해야 합니다:

    WRL_TYPE
    --------------------
    WRL_PARAMETER
    --------------------------------------------------------------------------------
    STATUS       WALLET_TYPE    WALLET_OR KEYSTORE 
    FULLY_BAC
    ------------------------------ -------------------- --------- --------  ---------
        CON_ID
    ----------
    FILE
    /u01/app/oracle/admin/db1/wallet/
    OPEN       AUTOLOGIN    SINGLE    NONE     NO
  3. 전자 지갑 위치를 확인하십시오.
    [oracle@exa11db01 wallet]$ ls -lrttotal

    출력은 다음과 유사해야 합니다:

    total 20
    -rw------- 1 oracle dba 2987 Feb  2 15:37 ewallet_2021020223374667_masterbackup.p12
    -rw------- 1 oracle dba 5419 Feb  2 15:37 ewallet.p12
    -rw------- 1 oracle dba 5464 Feb  2 15:37 cwallet.sso
  4. 전자 지갑 파일을 온-프레미스 인스턴스의 두번째 노드로 복사합니다.
    [oracle@exa11db01 wallet]$ scp *.* exa11db02:/u01/app/oracle/admin/db1/wallet/

    출력은 다음과 유사해야 합니다:

    cwallet.sso                                        100% 5464     8.7MB/s   00:00    
    ewallet_2021020223374667_masterbackup.p12          100% 2987    12.1MB/s   00:00    
    ewallet.p12                                         100% 5419    18.2MB/s   00:00 
  5. 노드 1에서 데이터베이스 상태를 가져옵니다.
    [oracle@exa11db01 db1]$ srvctl status database -d db1

    출력은 다음과 유사해야 합니다:

    Instance db11 is running on node exa11db01
    Instance db12 is running on node exa11db02
  6. 노드 1에서 데이터베이스를 정지하고 시작하여 전자 지갑 설정을 완료합니다.
    [oracle@exa11db01 db1]$ srvctl stop database -d db1
    [oracle@exa11db01db1]$ srvctl start database -d db1
  7. 암호화된 테이블스페이스를 생성합니다.
    다음 코드는 aes128암호화를 사용하여 암호화된 테이블스페이스를 설정합니다:
    alter tablespace system encryption online using 'aes128' encrypt;
    alter tablespace sysaux encryption online using 'aes128' encrypt;
    alter tablespace undotbs1 encryption online using 'aes128' encrypt;
    alter tablespace undotbs2 encryption online using 'aes128' encrypt;
    alter tablespace users encryption online using 'aes128' encrypt;
  8. 테이블스페이스 이름과 dbf가 암호화되었는지 확인합니다.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    암호화된 경우 파일의 시퀀스 번호가 다릅니다.

백업 데이터베이스에 전자 지갑 생성

백업 Oracle Database Exadata Cloud Service의 각 노드에 전자 지갑을 생성합니다. 전자 지갑은 각 노드에서 동일해야 합니다.

  1. OCI의 백업 데이터베이스에서 전자 지갑 파일 위치를 확인합니다.
    SQL> select * from V$ENCRYPTION_WALLET;
  2. 온-프레미스 소스 데이터베이스에서 클라우드의 백업 데이터베이스로 전자 지갑 파일을 복사합니다.
    [oracle@exa11db01 ~]$ scp -i FedExKey.ssh /u01/app/oracle/admin/db1/wallet/*.* 
    opc@10.255.195.131:/tmp/
  3. 전자 지갑이 Oracle Database Exadata Cloud Service의 디렉토리에 나타나는지 확인하십시오.
    [oracle@exacs82-vm3sv1 admin]$ cd /var/opt/oracle/dbaas_acfs/DB1/wallet_root/tde
    [oracle@exacs82-vm3sv1 tde]$ ls -lrt

    출력은 다음과 유사해야 합니다:

    total 72
    drwxr-xr-x 2 oracle oinstall 20480 Jan 23 13:50 Backup
    -rwxr-xr-x 1 oracle oinstall  5419 Feb  3 13:38 ewallet.p12
    -rwxr-xr-x 1 oracle oinstall  2987 Feb  3 13:38 ewallet_2021020223374667_masterbackup.p12
    -rw------- 1 oracle oinstall  5464 Feb  3 13:39 cwallet.sso
  4. 전자 지갑 파일을 두번째 노드로 복사합니다.