Cifrare i dati durante l'esportazione nello storage degli oggetti

Puoi cifrare i dati della tabella durante l'esportazione nello storage degli oggetti.

Utilizzare il parametro format e l'opzione encryption con DBMS_CLOUD.EXPORT_DATA per cifrare i dati quando si esegue l'esportazione da Autonomous Database allo storage degli oggetti.

Quando si esportano dati cifrati nello storage degli oggetti, tenere presente quanto riportato di seguito.

  • L'opzione encryption è supportata solo quando si esportano dati da Autonomous Database nello storage degli oggetti in formato CSV, JSON o XML.

  • Quando l'esportazione include sia la crittografia che la compressione, l'ordine delle operazioni è: prima i dati vengono compressi, poi i dati vengono cifrati e poi vengono caricati nello storage degli oggetti.

  • Esistono due metodi di cifratura supportati:

    • Utilizzo di una funzione definita dall'utente.

    • Uso di un algoritmo di cifratura specificato DBMS_CRYPTO.

      Per informazioni sulle funzioni e sulle procedure di cifratura e decifrazione, vedere DBMS_CRYPTO.

Argomenti

Cifrare i dati utilizzando gli algoritmi di cifratura DBMS_CRYPTO

Mostra i passi per cifrare i dati utilizzando algoritmi di cifratura DBMS_CRYPTO durante l'esportazione nello storage degli oggetti cloud.

Eseguire i passi riportati di seguito per cifrare i dati durante l'esportazione nello storage degli oggetti cloud. In questo esempio vengono esportati i dati della tabella in un file CSV.

  1. Connettersi all'istanza di Autonomous Database.

    See Connect to Autonomous Database for more information.

  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 Procedure.

    La creazione di una credenziale per accedere all'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure non è necessaria se si abilitano le credenziali del principal risorsa. Per ulteriori informazioni, consulta la sezione Usa principal risorsa per accedere alle risorse di Oracle Cloud Infrastructure.

  3. Creare una credenziale per memorizzare la chiave di cifratura (la chiave di cifratura da utilizzare per la cifratura dei dati).

    Quando si cifrano i dati utilizzando algoritmi di cifratura DBMS_CRYPTO, la chiave di cifratura viene memorizzata in una credenziale. La chiave viene specificata nel campo password in una credenziale creata con 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 una credenziale 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 CREATE_CREDENTIAL Procedure.

  4. Eseguire DBMS_CLOUD.EXPORT_DATA.

    Utilizzare il parametro format con l'opzione encryption. Il tipo encryption specifica l'algoritmo di cifratura DBMS_CRYPTO da utilizzare per cifrare i dati della tabella e il valore credential_name è una credenziale che specifica il segreto (chiave di cifratura).

    Ad esempio:

    BEGIN
        DBMS_CLOUD.EXPORT_DATA (
            credential_name => 'OBJ_STORE_CRED',
            file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/encrypted.csv',
            query           => 'SELECT * FROM ADMIN.employees',
            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;
    /

    In questo modo i dati vengono crittografati ed esportati dalla tabella EMPLOYEES in un file CSV.

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

    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 ulteriori informazioni, vedere EXPORT_DATA Procedure e DBMS_CLOUD Package Format Options for EXPORT_DATA.

Dopo aver cifrato i file con DBMS_CLOUD.EXPORT_DATA, quando si utilizzano algoritmi di cifratura DBMS_CRYPTO per cifrare i file, sono disponibili le opzioni riportate di seguito per l'utilizzo o l'importazione dei file esportati.

  • È possibile utilizzare DBMS_CLOUD.COPY_DATA o DBMS_CLOUD.COPY_COLLECTION con le stesse opzioni dell'algoritmo di cifratura e la chiave per decifrare i file.

    Per ulteriori informazioni, vedere Decifra e carica dati mediante algoritmi DBMS_CRYPTO.

  • È possibile eseguire query sui dati in una tabella esterna fornendo le stesse opzioni dell'algoritmo di cifratura e la chiave per decifrare i file, con una delle procedure seguenti:

    • 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.

    Per ulteriori informazioni, vedere Decifra e carica dati mediante algoritmi DBMS_CRYPTO.

  • In un sistema che non è un Autonomous Database è possibile utilizzare il package DBMS_CRYPTO con le stesse opzioni di algoritmo e la chiave per decifrare i file.

    Tenere presente che la chiave viene memorizzata come VARCHAR2 nella credenziale in Autonomous Database, ma DBMS_CRYPTO utilizza il tipo RAW per il parametro chiave.

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

Cifrare i dati con una funzione di cifratura definita dall'utente

Mostra i passi per cifrare i dati utilizzando una funzione di cifratura definita dall'utente durante l'esportazione nello storage degli oggetti cloud.

Eseguire i passi riportati di seguito per cifrare i dati durante l'esportazione nello storage degli oggetti cloud. In questo esempio vengono esportati i dati della tabella in un file CSV.

  1. Connettersi all'istanza di Autonomous Database.

    See Connect to Autonomous Database for more information.

  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 Procedure.

    La creazione di una credenziale per accedere all'area di memorizzazione degli oggetti di Oracle Cloud Infrastructure non è necessaria se si abilitano le credenziali del principal risorsa. Per ulteriori informazioni, consulta la sezione Usa principal risorsa per accedere alle risorse di Oracle Cloud Infrastructure.

  3. Creare una funzione di callback definita dall'utente per cifrare i dati.

    Ad esempio:

    CREATE OR REPLACE FUNCTION encryption_func (data IN BLOB)
      RETURN BLOB
      IS
          l_encrypted_data BLOB;
           BEGIN   
         DBMS_LOB.CREATETEMPORARY (l_encrypted_data, TRUE, DBMS_LOB.CALL);
         DBMS_CRYPTO.ENCRYPT (
             dst => l_encrypted_data,
             src => data,
             typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
             key => 'encryption key'
          );
         RETURN l_encrypted_data;
    END encryption_func;
    /

    Questa operazione crea la funzione di cifratura ENCRYPTION_FUNC. Questa funzione crittografa i dati utilizzando una cifra di flusso o blocco con una chiave fornita dall'utente.

    Nota

    È necessario creare una chiave di cifratura da utilizzare come valore nel parametro KEY. Per ulteriori informazioni sulla generazione della chiave di cifratura, vedere DBMS_CRYPTO Operational Notes.
  4. Eseguire DBMS_CLOUD.EXPORT_DATA con il parametro format, includere l'opzione encryption e specificare un valore user_defined_function.

    Ad esempio:

    BEGIN
          DBMS_CLOUD.EXPORT_DATA (
            credential_name => 'OBJ_STORE_CRED',
            file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/encrypted.csv',
            query           => 'SELECT * FROM ADMIN.emp',
            format          => json_object( 
                                  'type' value 'csv', 
                                  'encryption' value json_object('user_defined_function' value 'admin.encryption_func'))
          );
    END;
    /

    In questo modo i dati vengono cifrati dalla query specificata nella tabella EMP ed esportati come file CSV nello storage degli oggetti cloud. Il parametro format con il valore encryption specifica la funzione di cifratura definita dall'utente da utilizzare per la cifratura dei dati.

    Nota

    La funzione di cifratura deve disporre del privilegio EXECUTE.

    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 ulteriori informazioni, vedere EXPORT_DATA Procedure e DBMS_CLOUD Package Format Options for EXPORT_DATA.