加密來源資料庫中的資料

透資料加密 (TDE) 可將 Oracle Database 中的資料以靜態方式加密。它會停止未經授權的作業系統嘗試存取儲存在檔案中的資料庫資料,而不會影響應用程式如何使用 SQL 存取資料TDE 已與 Oracle Database 完全整合,可以加密整個資料庫備份 (RMAN)、「資料汲取」匯出、整個應用程式表格空間或特定機密資料欄。無論資料在表格空間儲存體檔案、暫時表格空間、還原表格空間或其他檔案 (例如重做日誌) 中,加密的資料在資料庫中都會維持加密。

若要進行災害復原,您內部部署和 Oracle Cloud Infrastructure 執行處理中的密碼必須相同。如果沒有,請使用 sqlplus 命令來更新密碼。

判斷來源資料庫上是否已啟用 TDE

如果您的來源資料庫未啟用通透資料加密 (TDE),當您將資料庫移轉至 Oracle Cloud Infrastructure (OCI) 或在災害復原期間並不會加密資料。您必須手動加密未加密的資料。一旦在 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. 將公事包檔案複製到第二個節點。