Chiffrement des données lors de l'export vers Object Storage

Vous pouvez crypter les données de table lors de l'export vers Object Storage.

Utilisez le paramètre format et l'option encryption avec DBMS_CLOUD.EXPORT_DATA pour crypter les données lors de l'export d'Autonomous Database vers Object Storage.

Lorsque vous exportez des données cryptées vers Object Storage, tenez compte des points suivants :

  • L'option encryption est uniquement prise en charge lors de l'export de données d'Autonomous Database vers Object Storage au format CSV, JSON ou XML.

  • Lorsque l'export inclut à la fois le cryptage et la compression, l'ordre des opérations est le suivant : les données sont d'abord compressées, puis cryptées, puis téléchargées vers Object Storage.

  • Il existe deux méthodes de cryptage prises en charge :

    • Utilisation d'une fonction définie par l'utilisateur.

    • A l'aide d'un algorithme de cryptage spécifié par DBMS_CRYPTO.

      Reportez-vous à DBMS_CRYPTO pour plus d'informations sur les fonctions cryptographiques et les procédures de chiffrement et de déchiffrement.

Rubriques

Crypter les données à l'aide d'algorithmes de cryptage DBMS_CRYPTO

Présente les étapes de cryptage des données à l'aide d'algorithmes de cryptage DBMS_CRYPTO lors de l'export vers Cloud Object Storage.

Pour crypter les données lors de l'export vers Cloud Object Storage, procédez comme suit (cet exemple exporte les données de table vers un fichier CSV) :

  1. Connectez-vous à votre instance Autonomous Database.

    Pour plus d'informations, reportez-vous à Connexion à Autonomous Database.

  2. Stockez vos informations d'identification de stockage d'objet cloud à l'aide de DBMS_CLOUD.CREATE_CREDENTIAL.

    Exemple :

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

    Les valeurs fournies pour username et password dépendent du service Cloud Object Storage que vous utilisez .

    Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.

    La création d'informations d'identification pour accéder à Oracle Cloud Infrastructure Object Storage n'est pas requise si vous activez les informations d'identification de principal de ressource. Pour plus d'informations, reportez-vous à Utilisation du principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

  3. Créez des informations d'identification pour stocker la clé de cryptage (clé de cryptage à utiliser pour crypter les données).

    Lorsque vous cryptez des données à l'aide d'algorithmes de cryptage DBMS_CRYPTO, vous stockez la clé de cryptage dans des informations d'identification. La clé est indiquée dans le champ password dans les informations d'identification que vous créez avec DBMS_CLOUD.CREATE_CREDENTIAL.

    Exemple :

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

    Vous pouvez également créer des informations d'identification pour stocker la clé dans un coffre. Exemple :

    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;
    /
    Remarque

    Le paramètre username que vous indiquez dans les informations d'identification qui stockent la clé peut être n'importe quelle chaîne.

    Cela crée les informations d'identification ENC_CRED_NAME, qui sont des informations d'identification de clé secrète de coffre, où la clé secrète (clé de décryptage/cryptage) est stockée en tant que clé secrète dans Oracle Cloud Infrastructure Vault.

    Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.

  4. Exécutez DBMS_CLOUD.EXPORT_DATA.

    Utilisez le paramètre format avec l'option encryption. Le type encryption indique l'algorithme de cryptage DBMS_CRYPTO à utiliser pour crypter les données de table et la valeur credential_name est des informations d'identification qui indiquent la clé secrète (clé de cryptage).

    Exemple :

    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;
    /

    Cette opération crypte et exporte les données de la table EMPLOYEES dans un fichier CSV.

    Pour plus d'informations sur les algorithmes de cryptage, reportez-vous à DBMS_CRYPTO Algorithmes.

    Dans cet exemple, namespace-string est l'espace de noms de stockage d'objet Oracle Cloud Infrastructure et bucketname est le nom du bucket. Pour plus d'informations, reportez-vous à Présentation des espaces de noms Object Storage.

    Pour plus d'informations, reportez-vous à Procédure EXPORT_DATA et à Options de format de package DBMS_CLOUD pour EXPORT_DATA.

Après avoir crypté les fichiers avec DBMS_CLOUD.EXPORT_DATA, lorsque vous utilisez des algorithmes de cryptage DBMS_CRYPTO pour crypter les fichiers, vous disposez des options suivantes pour utiliser ou importer les fichiers exportés :

  • Vous pouvez utiliser DBMS_CLOUD.COPY_DATA ou DBMS_CLOUD.COPY_COLLECTION avec les mêmes options d'algorithme de cryptage et la même clé pour décrypter les fichiers.

    Pour plus d'informations, reportez-vous à Déchiffrer et charger des données à l'aide d'algorithmes DBMS_CRYPTO.

  • Vous pouvez interroger les données d'une table externe en fournissant les mêmes options d'algorithme de cryptage et la même clé pour décrypter les fichiers, avec l'une des procédures suivantes :

    • DBMS_CLOUD.CREATE_EXTERNAL_TABLE

    • DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE

    • DBMS_CLOUD.CREATE_HYBRID_PART_TABLE

      Pour DBMS_CLOUD.CREATE_HYBRID_PART_TABLE, cette option s'applique uniquement aux fichiers Object Storage.

    Pour plus d'informations, reportez-vous à Déchiffrer et charger des données à l'aide d'algorithmes DBMS_CRYPTO.

  • Sur un système qui n'est pas une instance Autonomous Database, vous pouvez utiliser le package DBMS_CRYPTO avec les mêmes options d'algorithme et la même clé pour décrypter les fichiers.

    La clé est stockée en tant que VARCHAR2 dans les informations d'identification dans Autonomous Database, mais DBMS_CRYPTO utilise le type RAW pour le paramètre de clé.

    Pour plus d'informations sur les algorithmes de cryptage, reportez-vous à DBMS_CRYPTO Algorithmes.

Crypter les données à l'aide d'une fonction de cryptage définie par l'utilisateur

Présente les étapes de cryptage des données à l'aide d'une fonction de cryptage définie par l'utilisateur lors de l'export vers Cloud Object Storage.

Pour crypter les données lors de l'export vers Cloud Object Storage, procédez comme suit (cet exemple exporte les données de table vers un fichier CSV) :

  1. Connectez-vous à votre instance Autonomous Database.

    Pour plus d'informations, reportez-vous à Connexion à Autonomous Database.

  2. Stockez vos informations d'identification de stockage d'objet cloud à l'aide de DBMS_CLOUD.CREATE_CREDENTIAL.

    Exemple :

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

    Les valeurs fournies pour username et password dépendent du service Cloud Object Storage que vous utilisez .

    Pour plus d'informations, reportez-vous à Procédure CREATE_CREDENTIAL.

    La création d'informations d'identification pour accéder à Oracle Cloud Infrastructure Object Storage n'est pas requise si vous activez les informations d'identification de principal de ressource. Pour plus d'informations, reportez-vous à Utilisation du principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

  3. Créez une fonction de callback définie par l'utilisateur pour crypter les données.

    Exemple :

    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;
    /

    La fonction de cryptage ENCRYPTION_FUNC est ainsi créée. Cette fonction crypte les données à l'aide d'un cryptage de flux ou de blocs avec une clé fournie par l'utilisateur.

    Remarque

    Vous devez créer une clé de cryptage à utiliser comme valeur dans le paramètre KEY. Pour plus d'informations sur la génération de la clé de chiffrement, reportez-vous à DBMS_CRYPTO Operational Notes.
  4. Exécutez DBMS_CLOUD.EXPORT_DATA avec le paramètre format, incluez l'option encryption et indiquez user_defined_function.

    Exemple :

    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;
    /

    Cette opération crypte les données de la requête indiquée dans la table EMP et exporte les données sous forme de fichier CSV sur le stockage d'objet cloud. Le paramètre format avec la valeur encryption indique la fonction de cryptage définie par l'utilisateur à utiliser pour crypter les données.

    Remarque

    Vous devez disposer du privilège EXECUTE sur la fonction de cryptage.

    Dans cet exemple, namespace-string est l'espace de noms de stockage d'objet Oracle Cloud Infrastructure et bucketname est le nom du bucket. Pour plus d'informations, reportez-vous à Présentation des espaces de noms Object Storage.

    Pour plus d'informations, reportez-vous à Procédure EXPORT_DATA et à Options de format de package DBMS_CLOUD pour EXPORT_DATA.