Decifra i dati durante l'importazione dallo storage degli oggetti

Puoi decifrare e caricare i dati dai file cifrati memorizzati nello storage degli oggetti. Inoltre, puoi decifrare i dati cifrati nello storage degli oggetti che usi in una tabella esterna.

Questa opzione è utile quando si esegue la migrazione da un database on premise a un database AI autonomo se i dati nei file di origine vengono cifrati.

Nota

Questa opzione è supportata solo per file di storage degli oggetti di dimensioni inferiori a 4 GB.

Questa opzione è applicabile per le seguenti procedure:

  • DBMS_CLOUD.COPY_DATA

  • DBMS_CLOUD.CREATE_EXTERNAL_TABLE

  • DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE

  • DBMS_CLOUD.CREATE_HYBRID_PART_TABLE

    Per DBMS_CLOUD.CREATE_HYBRID_PART_TABLE questa opzione è applicabile solo ai file di storage degli oggetti.

  • DBMS_CLOUD.COPY_COLLECTION

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 in 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. In questo esempio viene utilizzato 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 nel database AI autonomo dallo storage degli oggetti:

  1. Connettersi all'istanza del database AI autonomo.
  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 CREATE_CREDENTIAL Procedura.

  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 in cui è memorizzata la chiave può essere una stringa qualsiasi.

    Questa operazione crea 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 CREATE_CREDENTIAL Procedura.

  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 DBMS_CRYPTO Algoritmi.

    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 COPY_DATA Procedura.

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

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. In questo esempio viene utilizzato 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 nel database AI autonomo dallo storage degli oggetti:

  1. Connettersi all'istanza del database AI autonomo.
  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 CREATE_CREDENTIAL Procedura.

  3. Creare una funzione di callback di decifrazione della funzione 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;
    /

    In questo modo 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 viene recuperata dinamicamente effettuando una chiamata REST al servizio Oracle Cloud Infrastructure Vault.

  4. Eseguire DBMS_CLOUD.COPY_DATA e specificare l'opzione format encryption, quindi 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 COPY_DATA Procedura.

    Per informazioni dettagliate sui parametri format disponibili, è possibile utilizzare DBMS_CLOUD.COPY_DATA, vedere DBMS_CLOUD Opzioni formato pacchetto.