Crypter les 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 lorsque vous exportez 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 : d'abord les données sont compressées, puis les données sont 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.

    • Utilisation d'un algorithme de cryptage indiqué par DBMS_CRYPTO.

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

Sujets

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

Présente les étapes de cryptage des données à l'aide des 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 (cet exemple exporte les données de table dans un fichier CSV), procédez comme suit :

  1. Connectez-vous à votre instance Autonomous Database.

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

  2. Stockez vos informations d'identification Cloud Object Storage à l'aide de DBMS_CLOUD.CREATE_CREDENTIAL.

    Par 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 à la banque d'objets Oracle Cloud Infrastructure 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 à des ressources Oracle Cloud Infrastructure.

  3. Créez des informations d'identification pour stocker la clé de cryptage (la clé de cryptage à utiliser pour le cryptage des 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.

    Par 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. Par 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 indiqué dans les informations d'identification qui stockent la clé peut être n'importe quelle chaîne.

    Cette opération crée les informations d'identification ENC_CRED_NAME, qui sont des informations d'identification de clé secrète de coffre, dans lesquelles 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 la table. La valeur credential_name correspond aux informations d'identification qui indiquent la clé secrète (clé de cryptage).

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

    Les données de la table EMPLOYEES sont ainsi cryptées et exportées dans un fichier CSV.

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

    Dans cet exemple, namespace-string est l'espace de noms 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 aux sections EXPORT_DATA Procedure et DBMS_CLOUD Package Format Options for 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 que vous avez 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écryptage et chargement de 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 clé de décryptage des 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 n'est applicable qu'aux fichiers Object Storage.

    Pour plus d'informations, reportez-vous à Décryptage et chargement de 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 chiffrement, reportez-vous à DBMS_CRYPTO Algorithms.

Crypter les données avec 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 (cet exemple exporte les données de table dans un fichier CSV), procédez comme suit :

  1. Connectez-vous à votre instance Autonomous Database.

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

  2. Stockez vos informations d'identification au stockage d'objet cloud à l'aide de la procédure DBMS_CLOUD.CREATE_CREDENTIAL

    Par 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 à la banque d'objets Oracle Cloud Infrastructure 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 à des ressources Oracle Cloud Infrastructure.

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

    Par 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 bloc avec une clé fournie par l'utilisateur.

    Remarque

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

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

    Cela crypte les données de la requête spécifiée dans la table EMP et les exporte en tant que fichier CSV sur Cloud Object Storage. 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 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 aux sections EXPORT_DATA Procedure et DBMS_CLOUD Package Format Options for EXPORT_DATA.