Daten in der Quelldatenbank verschlüsseln

Transparente Datenverschlüsselung (TDE) verschlüsselt Daten transparent im Ruhezustand in einem Oracle Database. Es stoppt nicht autorisierte Versuche des Betriebssystems, auf Datenbankdaten zuzugreifen, die in Dateien gespeichert sind, ohne Auswirkungen darauf zu haben, wie Anwendungen mit SQL auf die Daten zugreifen.TDE ist vollständig in Oracle Database integriert und kann ganze Datenbankbackups (RMAN), Data Pump-Exporte, ganze Anwendungs-Tablespaces oder spezifische sensible Spalten verschlüsseln. Verschlüsselte Daten bleiben in der Datenbank verschlüsselt, unabhängig davon, ob sie sich in Tablespace-Speicherdateien, temporären Tablespaces, Undo-Tablespaces oder anderen Dateien wie Redo-Logs befinden.

Bei Disaster Recovery muss das Kennwort in Ihren On-Premise- und Oracle Cloud Infrastructure-Instanzen identisch sein. Wenn dies nicht der Fall ist, aktualisieren Sie das Kennwort mit dem Befehl sqlplus.

Bestimmen, ob TDE in der Quelldatenbank aktiviert ist

Wenn Transparente Datenverschlüsselung (TDE) in Ihrer Quelldatenbank nicht aktiviert ist, werden die Daten nicht verschlüsselt, wenn Sie die Datenbank in Oracle Cloud Infrastructure (OCI) oder während des Disaster Recoverys migrieren. Sie müssen die unverschlüsselten Daten manuell verschlüsseln. Einmal in OCI werden alle neuen Daten automatisch verschlüsselt.

  1. Bestimmen Sie, ob der Tablespace verschlüsselt ist.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    Wenn der Tablespace nicht verschlüsselt ist, sieht die Ausgabe wie folgt aus:

    TABLESPACE_NAME 	       		ENC
    ------------------------------ ---
    SYSTEM                          NO
    SYSAUX                          NO
    UNDOTBS1                        NO
    TEMP                            NO
    USERS			      NO
  2. Suchen Sie die zugehörigen Datenbankdatendateien (. dbf) im Dateisystem.
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    Die Ausgabe sieht wie folgt aus:

    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-Verschlüsselung in der Quelldatenbank aktivieren

Mit Transparent Data Encryption (TDE) können Sie sensible Daten verschlüsseln, die in Tabellen und Tablespaces gespeichert sind. Verschlüsselte Daten werden transparent für einen Datenbankbenutzer oder eine Anwendung entschlüsselt, die Zugriff auf Daten hat.

  1. Wechseln Sie in der Quelldatenbank zum Verzeichnis $ORACLE_BASE.
    bash-4.2$ pwd
    /opt/oracle/admin/ORCLCDB
  2. Erstellen Sie ein Verzeichnis mit dem Namen wallet.
    $ mkdir wallet
  3. Erstellen Sie das Wallet zusammen mit einem sicheren Kennwort, das eine Mischung aus alphanumerischen Zeichen verwendet.
    Dieser Schritt erstellt und öffnet das Wallet. Nach dem Öffnen der Datenbank bleibt das Wallet geöffnet, bis entweder das Wallet explizit geschlossen ist oder die Datenbank heruntergefahren wird, zu welchem Zeitpunkt das Wallet automatisch geschlossen wird.
    SQL> alter system set encryption key identified by "wallet_password";
  4. Öffnen Sie ein geschlossenes Wallet erneut, nachdem die Datenbank neu gestartet wurde.
    SQL> alter system set wallet open identified by "wallet_password";
  5. Verschlüsseln Sie den Tablespace.
    Der folgende Code verwendet AES-128-Verschlüsselung.
    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. Prüfen Sie, ob der Tablespace verschlüsselt ist.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    Die Ausgabe sieht wie folgt aus:

    TABLESPACE_NAME 	       ENC
    ------------------------------ ---
    SYSTEM			    YES
    SYSAUX			    YES
    UNDOTBS1                       YES
    TEMP			      NO
    USERS			     YES
  7. Prüfen Sie, ob die zugehörigen Datenbankdatendateien (. dbf ) im Dateisystem verschlüsselt sind.
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    Die Ausgabe sieht wie folgt aus:

    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

Wallet in der Quelldatenbank erstellen

Erstellen Sie ein Wallet zusammen mit einem sicheren Kennwort.

  1. Führen Sie die folgenden Befehle auf Knoten 1 der primären On-Premise-Datenbank aus, um das Wallet zu erstellen:
    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. Zeigen Sie die Verschlüsselungs-Wallet-Parameter an.
    SQL> select * from v$encryption_wallet;

    Die Ausgabe sollte wie folgt aussehen:

    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. Prüfen Sie den Wallet-Speicherort.
    [oracle@exa11db01 wallet]$ ls -lrttotal

    Die Ausgabe sollte wie folgt aussehen:

    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. Kopieren Sie die Wallet-Dateien auf den zweiten Knoten der On-Premise-Instanz.
    [oracle@exa11db01 wallet]$ scp *.* exa11db02:/u01/app/oracle/admin/db1/wallet/

    Die Ausgabe sollte wie folgt aussehen:

    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. Rufen Sie auf Knoten 1 den Datenbankstatus ab.
    [oracle@exa11db01 db1]$ srvctl status database -d db1

    Die Ausgabe sollte wie folgt aussehen:

    Instance db11 is running on node exa11db01
    Instance db12 is running on node exa11db02
  6. Stoppen Sie auf Knoten 1 die Datenbank, und starten Sie sie, um das Wallet-Setup abzuschließen.
    [oracle@exa11db01 db1]$ srvctl stop database -d db1
    [oracle@exa11db01db1]$ srvctl start database -d db1
  7. Erstellen Sie den verschlüsselten Tablespace.
    Der folgende Code richtet einen verschlüsselten Tablespace mit aes128-Verschlüsselung ein:
    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. Prüfen Sie, ob Tablespace-Name und dbf verschlüsselt sind.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    Bei Verschlüsselung haben die Dateien unterschiedliche Sequenznummern.

Wallet in der Backup-Datenbank erstellen

Erstellen Sie ein Wallet auf jedem Knoten des Backup-Oracle Database Exadata Cloud Service. Das Wallet muss auf jedem Knoten identisch sein.

  1. Prüfen Sie in der Backupdatenbank auf OCI den Speicherort der Wallet-Datei.
    SQL> select * from V$ENCRYPTION_WALLET;
  2. Kopieren Sie die Wallet-Dateien aus der On-Premise-Quelldatenbank in die Backupdatenbank in der Cloud.
    [oracle@exa11db01 ~]$ scp -i FedExKey.ssh /u01/app/oracle/admin/db1/wallet/*.* 
    opc@10.255.195.131:/tmp/
  3. Prüfen Sie, ob das Wallet im Verzeichnis in Oracle Database Exadata Cloud Service angezeigt wird.
    [oracle@exacs82-vm3sv1 admin]$ cd /var/opt/oracle/dbaas_acfs/DB1/wallet_root/tde
    [oracle@exacs82-vm3sv1 tde]$ ls -lrt

    Die Ausgabe sollte folgendermaßen aussehen:

    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. Kopieren Sie die Wallet-Dateien auf den zweiten Knoten.