Cifra i dati durante l'esportazione nello storage degli oggetti

Puoi cifrare i dati delle tabelle 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 nello storage degli oggetti.

Tenere presente quanto riportato di seguito quando si esportano i dati cifrati nello storage degli oggetti.

  • L'opzione encryption è supportata solo durante l'esportazione dei dati da Autonomous Database nello storage degli oggetti in formato CSV, JSON o XML.

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

  • Sono disponibili due metodi di cifratura supportati:

    • Utilizzando una funzione definita dall'utente.

    • Utilizzando un algoritmo di cifratura specificato in DBMS_CRYPTO.

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

Temi

Cifra dati mediante algoritmi di cifratura DBMS_CRYPTO

Mostra i passi per cifrare i dati utilizzando gli 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 i dati della tabella vengono esportati in un file CSV).

  1. Connettersi all'istanza di Autonomous Database.

    Per ulteriori informazioni, consulta la sezione relativa alla connessione ad Autonomous 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 CREATE_CREDENTIAL Procedura.

    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 relativa all'uso del principal delle risorse 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 gli algoritmi di cifratura DBMS_CRYPTO, la chiave di cifratura viene memorizzata in una credenziale. La chiave viene specificata nel campo password di 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 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.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 è la 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 cifrati ed esportati dalla tabella EMPLOYEES in un file CSV.

    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 ulteriori informazioni, vedere EXPORT_DATA Procedura e DBMS_CLOUD Opzioni formato package per EXPORT_DATA.

Dopo aver cifrato i file con DBMS_CLOUD.EXPORT_DATA, quando si utilizzano gli algoritmi di cifratura DBMS_CRYPTO per cifrare i file, sono disponibili le opzioni riportate di seguito per utilizzare o importare i file esportati.

  • Per decifrare i file è possibile usare DBMS_CLOUD.COPY_DATA o DBMS_CLOUD.COPY_COLLECTION con le stesse opzioni dell'algoritmo di cifratura e la chiave.

    Per ulteriori informazioni, vedere Decifrare e caricare i dati mediante gli algoritmi DBMS_CRYPTO.

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

    • 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 Decifrare e caricare i dati mediante gli 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 Algoritmi.

Cifra 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 i dati della tabella vengono esportati in un file CSV).

  1. Connettersi all'istanza di Autonomous Database.

    Per ulteriori informazioni, consulta la sezione relativa alla connessione ad Autonomous 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 CREATE_CREDENTIAL Procedura.

    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 relativa all'uso del principal delle risorse 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;
    /

    In questo modo viene creata la funzione di cifratura ENCRYPTION_FUNC. Questa funzione cifra i dati utilizzando una cifra di flusso o di 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 cifrare i dati.

    Nota

    Per la funzione di cifratura è necessario 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 Procedura e DBMS_CLOUD Opzioni formato package per EXPORT_DATA.