Cifratura dei dati nel database di origine

Cifratura trasparente dei dati (TDE) cifra in modo trasparente i dati a riposo in un Oracle Database. Arresta i tentativi non autorizzati del sistema operativo di accedere ai dati del database memorizzati nei file, senza influire sul modo in cui le applicazioni accedono ai dati utilizzando SQL. TDE è completamente integrato con Oracle Database e può cifrare interi backup del database (RMAN), esportazioni Data Pump, intere tablespace dell'applicazione o colonne riservate specifiche. I dati cifrati rimangono cifrati nel database, indipendentemente dal fatto che si trovi nei file di memorizzazione delle tablespace, nelle tablespace temporanee, nelle tablespace di undo o in altri file, ad esempio nei redo log.

Per il recupero di emergenza, la password nelle istanze in locale e Oracle Cloud Infrastructure deve essere la stessa. In caso contrario, utilizzare il comando sqlplus per aggiornare la password.

Determina se TDE è abilitato nel database di origine

Se la cifratura trasparente dei dati (TDE) non è abilitata nel database di origine, i dati non vengono cifrati quando si esegue la migrazione del database in Oracle Cloud Infrastructure (OCI) o durante il recupero di emergenza. È necessario cifrare manualmente i dati non cifrati. Una volta entrati in OCI, tutti i nuovi dati vengono crittografati automaticamente.

  1. Determinare se la tablespace è cifrata.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    Quando la tablespace non è cifrata, l'output sarà simile a quanto riportato di seguito.

    TABLESPACE_NAME 	       		ENC
    ------------------------------ ---
    SYSTEM                          NO
    SYSAUX                          NO
    UNDOTBS1                        NO
    TEMP                            NO
    USERS			      NO
  2. Trovare i file di dati del database associati (. dbf ) nel file system.
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    L'output sarà simile a quanto segue:

    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

Abilita cifratura TDE nel database di origine

TDE (Transparent Data Encryption) consente di cifrare i dati sensibili memorizzati nelle tabelle e nelle tablespace. I dati cifrati vengono decifrati in modo trasparente per un utente o un'applicazione del database che dispone dell'accesso ai dati.

  1. Andare alla directory $ORACLE_BASE nel database di origine.
    bash-4.2$ pwd
    /opt/oracle/admin/ORCLCDB
  2. Creare una directory denominata wallet.
    $ mkdir wallet
  3. Creare il wallet, insieme a una password sicura che utilizza un mix di caratteri alfanumerici.
    Questo passo crea e apre il wallet. Dopo l'apertura del database, il wallet rimane aperto fino alla chiusura esplicita del wallet o alla chiusura del database, al momento della chiusura automatica del wallet.
    SQL> alter system set encryption key identified by "wallet_password";
  4. Riaprire un wallet chiuso dopo il riavvio del database.
    SQL> alter system set wallet open identified by "wallet_password";
  5. Cifra la tablespace.
    Il codice riportato di seguito utilizza la cifratura 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. Verificare che la tablespace sia cifrata.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    L'output sarà simile a quanto segue:

    TABLESPACE_NAME 	       ENC
    ------------------------------ ---
    SYSTEM			    YES
    SYSAUX			    YES
    UNDOTBS1                       YES
    TEMP			      NO
    USERS			     YES
  7. Verificare che i file di dati del database associati (. dbf ) nel file system siano cifrati.
    SQL> select TABLESPACE_NAME, FILE_NAME from dba_data_files;

    L'output sarà simile a quanto segue:

    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

Creare un wallet nel database di origine

Creare un wallet insieme a una password sicura.

  1. Per creare il wallet, eseguire i comandi riportati di seguito sul nodo 1 del database primario in locale.
    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. Visualizzare i parametri del wallet di cifratura.
    SQL> select * from v$encryption_wallet;

    L'output dovrebbe essere simile al seguente:

    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. Controllare la posizione del wallet.
    [oracle@exa11db01 wallet]$ ls -lrttotal

    L'output dovrebbe essere simile al seguente:

    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. Copiare i file del wallet nel secondo nodo dell'istanza in locale.
    [oracle@exa11db01 wallet]$ scp *.* exa11db02:/u01/app/oracle/admin/db1/wallet/

    L'output dovrebbe essere simile al seguente:

    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. Nel nodo 1, ottenere lo stato del database.
    [oracle@exa11db01 db1]$ srvctl status database -d db1

    L'output dovrebbe essere simile al seguente:

    Instance db11 is running on node exa11db01
    Instance db12 is running on node exa11db02
  6. Nel nodo 1 arrestare e avviare il database per completare l'impostazione del wallet.
    [oracle@exa11db01 db1]$ srvctl stop database -d db1
    [oracle@exa11db01db1]$ srvctl start database -d db1
  7. Creare la tablespace cifrata.
    Il seguente codice imposta una tablespace cifrata con cifratura 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. Verificare che il nome della tablespace e dbf siano cifrati.
    SQL> select tablespace_name, encrypted from dba_tablespaces;

    Quando cifrati, i file hanno numeri di sequenza diversi.

Creare un wallet nel database di backup

Creare un wallet su ciascun nodo di Oracle Database Exadata Cloud Service di backup. Il wallet deve essere uguale su ogni nodo.

  1. Nel database di backup su OCI, controllare la posizione del file wallet.
    SQL> select * from V$ENCRYPTION_WALLET;
  2. Copiare i file wallet dal database di origine in locale nel database di backup nel cloud.
    [oracle@exa11db01 ~]$ scp -i FedExKey.ssh /u01/app/oracle/admin/db1/wallet/*.* 
    opc@10.255.195.131:/tmp/
  3. Verificare che il wallet venga visualizzato nella directory di 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

    L'output dovrebbe essere simile a quanto segue:

    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. Copiare i file wallet nel secondo nodo.