Decifra dati durante l'importazione dallo storage degli oggetti

Puoi decifrare e caricare i dati dai file cifrati memorizzati nello storage degli oggetti. Puoi anche decifrare i dati cifrati nello storage degli oggetti che utilizzi in una tabella esterna.

Questa opzione è utile quando si esegue la migrazione da un database in locale a un Autonomous AI Database se i dati nei file di origine vengono cifrati.

Nota: questa opzione è supportata solo per i file di storage degli oggetti di dimensioni inferiori a 4 GB.

Questa opzione è applicabile alle seguenti procedure:

Decifra e carica dati mediante algoritmi DBMS_CRYPTO

Mostra i passi per decifrare i file cifrati dallo storage degli oggetti e caricare i dati in una tabella di Autonomous AI Database (il passo di decifrazione utilizza algoritmi DBMS_CRYPTO).

Come prerequisito è necessario disporre di file cifrati e caricare i file nello storage degli oggetti. Questo esempio utilizza un file CSV e si presume che il file venga cifrato utilizzando l'algoritmo DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 e caricato nello storage degli oggetti cloud.

Per ulteriori informazioni sulla funzione ENCRYPT, vedere Funzione ENCRYPT.

Per ulteriori informazioni sulla generazione di una chiave di cifratura, vedere DBMS_CRYPTO Operational Notes.

Per decifrare e caricare i dati in una tabella esistente in Autonomous AI Database dallo storage degli oggetti, effettuare le operazioni riportate di seguito.

  1. Connettersi all'istanza di Autonomous AI Database.

  2. Memorizzare le credenziali dello storage degli oggetti cloud utilizzando DBMS_CLOUD.CREATE_CREDENTIAL.

    Ad esempio:

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
         credential_name => 'OBJ_STORE_CRED',
         username        => 'user1@example.com',
         password        => 'password'
       );
     END;
     /
    

    I valori forniti per username e password dipendono dal servizio di storage degli oggetti cloud in uso.

    Per ulteriori informazioni, vedere Procedura CREDENTIAL.

  3. Creare una credenziale per memorizzare la chiave utilizzando DBMS_CLOUD.CREATE_CREDENTIAL. Ad esempio:

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL (
         credential_name => 'ENC_CRED_NAME',
         username        => '*Any_username*',
         password        => 'password'
       );
     END;
     /
    

    In alternativa, è possibile creare le credenziali per memorizzare la chiave in un vault. Ad esempio:

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL (
         credential_name  => 'ENC_CRED_NAME',
         params           => JSON_OBJECT ('username' value '*Any_username*',
                                          'region'    value '*Region*',
                                          'secret_id' value '*Secret_id_value*'));
     END;
     /
    

    Nota: il parametro username specificato nella credenziale che memorizza la chiave può essere qualsiasi stringa.

    In questo modo viene creata la credenziale ENC_CRED_NAME, che è una credenziale segreta del vault, in cui il segreto (chiave di decifrazione/cifratura) viene memorizzato come segreto in Oracle Cloud Infrastructure Vault.

    Per ulteriori informazioni, vedere Procedura CREDENTIAL.

  4. Eseguire DBMS_CLOUD.COPY_DATA e specificare l'algoritmo di cifratura DBMS_CRYPTO come metodo di decifrazione.

     BEGIN
      DBMS_CLOUD.COPY_DATA (
        table_name       => 'CSV_COPY_DATA',
        credential_name  => 'OBJ_STORE_CRED',
        file_uri_list    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namepace-string/b/bucketname/o/encrypted.csv',
        format           => json_object( 'type' value 'csv', 'encryption' value json_object('type' value DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,'credential_name' value 'ENC_CRED_NAME'))
       );
     END;
     /
    

    Questa operazione decifra il file ENCRYPTED.CSV nello storage degli oggetti. I dati vengono quindi caricati nella tabella CSV_COPY_DATA. Il valore dell'opzione encryption del parametro format specifica un algoritmo di cifratura DBMS_CRYPTO da utilizzare per decifrare i dati.

    Per ulteriori informazioni sugli algoritmi di cifratura, vedere Algoritmi DBMS_CRYPTO.

    In questo esempio, *namespace-string* è lo spazio di nomi dello storage degli oggetti Oracle Cloud Infrastructure e bucketname è il nome del bucket. Per ulteriori informazioni, vedere Informazioni sugli spazi di nomi dello storage degli oggetti.

    Per informazioni dettagliate sui parametri, vedere Procedura COPY_DATA.

    Per informazioni dettagliate sui parametri format disponibili, è possibile utilizzare DBMS_CLOUD.COPY_DATA, vedere DBMS_CLOUD Package Format Options.

Decifra e carica dati con una funzione definita dall'utente

Mostra i passi per decifrare i file nello storage degli oggetti e caricare i dati nelle tabelle utilizzando una funzione di decifrazione definita dall'utente.

Come prerequisito per questi passi, è necessario disporre di file cifrati e caricare i file nello storage degli oggetti. Questo esempio utilizza un file CSV e si presume che il file venga cifrato utilizzando l'algoritmo DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 e caricato nello storage degli oggetti cloud.

Per ulteriori informazioni sulla funzione ENCRYPT, vedere Funzione ENCRYPT.

Per ulteriori informazioni sulla generazione di una chiave di cifratura, vedere DBMS_CRYPTO Operational Notes.

Per decifrare e caricare i dati in una tabella esistente in Autonomous AI Database dallo storage degli oggetti, effettuare le operazioni riportate di seguito.

  1. Connettersi all'istanza di Autonomous AI Database.

  2. Memorizzare le credenziali dello storage degli oggetti cloud utilizzando DBMS_CLOUD.CREATE_CREDENTIAL.

    Ad esempio:

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
         credential_name => 'OBJ_STORE_CRED',
         username        => 'user1@example.com',
         password        => 'password'
       );
     END;
     /
    

    I valori forniti per username e password dipendono dal servizio di storage degli oggetti cloud in uso.

    Per ulteriori informazioni, vedere Procedura CREDENTIAL.

  3. Creare una funzione di callback di decifrazione definita dall'utente.

    Ad esempio:

     CREATE OR REPLACE FUNCTION decryption_func(data IN BLOB)
     RETURN BLOB
     IS
       l_decrypted_data BLOB;
     BEGIN
       DBMS_LOB.createtemporary(l_decrypted_data, TRUE, DBMS_LOB.CALL);
       DBMS_CRYPTO.decrypt(
           dst => l_decrypted_data,
           src => data,
           typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
           key => 'encryption key'
         );
       RETURN l_decrypted_data;
     END decryption_callback;
     /
    

    Viene creata la funzione di decifrazione DECRYPTION_FUNC. Questa funzione decifra i dati utilizzando una cifra di flusso o blocco con una chiave fornita dall'utente. La chiave fornita dall'utente nell'esempio viene memorizzata in Oracle Cloud Infrastructure Vault e recuperata dinamicamente effettuando una chiamata REST al servizio Oracle Cloud Infrastructure Vault.

  4. Eseguire DBMS_CLOUD.COPY_DATA e specificare l'opzione format encryption e specificare la funzione definita dall'utente creata per decifrare i dati.

     BEGIN
      DBMS_CLOUD.COPY_DATA (
         table_name      => 'CSV_COPY_DATA',
         credential_name => 'OBJ_STORE_CRED',
         file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namepace-string/b/bucketname/o/encrypted.csv',
         format          => json_object(
                              'type' value 'csv',
                              'encryption' value json_object('user_defined_function' value 'admin.decryption_func'))
       );
     end;
     /
    

    Questa operazione decifra il file ENCRYPTED.CSV nello storage degli oggetti. I dati vengono quindi caricati nella tabella CSV_COPY_DATA. Il valore dell'opzione encryption del parametro format specifica un nome di funzione definito dall'utente da utilizzare per decifrare i dati.

    Nota: è necessario disporre del privilegio EXECUTE per la funzione definita dall'utente.

    In questo esempio, namespace-string è lo spazio di nomi dello storage degli oggetti Oracle Cloud Infrastructure e bucketname è il nome del bucket. Per ulteriori informazioni, vedere Informazioni sugli spazi di nomi dello storage degli oggetti.

    Per informazioni dettagliate sui parametri, vedere Procedura COPY_DATA.

    Per informazioni dettagliate sui parametri format disponibili, è possibile utilizzare DBMS_CLOUD.COPY_DATA, vedere DBMS_CLOUD Package Format Options.