Déchiffrer les données lors de l'import à partir d'Object Storage

Vous pouvez décrypter et charger des données à partir de fichiers cryptés stockés dans Object Storage. Vous pouvez également décrypter les données cryptées dans Object Storage que vous utilisez dans une table externe.

Cette option est utile lors de la migration d'une base de données sur site vers une instance Autonomous Database si les données de vos fichiers source sont cryptées.

Remarques :

Cette option est uniquement prise en charge pour les fichiers Object Storage de moins de 4 Go.

Cette option est applicable pour les procédures suivantes :

  • DBMS_CLOUD.COPY_DATA

  • 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 est uniquement applicable aux fichiers Object Storage.

  • DBMS_CLOUD.COPY_COLLECTION

Déchiffrer et charger des données à l'aide d'algorithmes DBMS_CRYPTO

Présente les étapes de décryptage des fichiers cryptés à partir d'Object Storage et de chargement des données dans une table sur Autonomous Database (l'étape de décryptage utilise des algorithmes DBMS_CRYPTO).

Vous devez au préalable avoir crypté les fichiers et les télécharger dans Object Storage. Cet exemple utilise un fichier CSV. Il est supposé que le fichier est crypté à l'aide de l'algorithme DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 et téléchargé vers le stockage d'objet cloud.

Pour plus d'informations sur la fonction ENCRYPT, reportez-vous à Fonction ENCRYPT.

Pour plus d'informations sur la génération d'une clé de cryptage, reportez-vous à DBMS_CRYPTO Operational Notes.

Pour déchiffrer et charger des données dans une table existante sur Autonomous Database à partir d'Object Storage, procédez comme suit :

  1. Connectez-vous à votre instance 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.

  3. Créez des informations d'identification pour stocker la clé à l'aide de 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. 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;
    /

    Remarques :

    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.COPY_DATA et spécifiez l'algorithme de cryptage DBMS_CRYPTO en tant que méthode de décryptage.
    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;
    /

    Cela décrypte le fichier ENCRYPTED.CSV dans Object Storage. Les données sont ensuite chargées dans la table CSV_COPY_DATA. La valeur de l'option encryption du paramètre format indique un algorithme de cryptage DBMS_CRYPTO à utiliser pour décrypter les données.

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

    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 obtenir des informations détaillées sur les paramètres, reportez-vous à Procédure COPY_DATA.

    Pour plus d'informations sur les paramètres format disponibles, vous pouvez les utiliser avec DBMS_CLOUD.COPY_DATA, reportez-vous à .

Déchiffrer et charger des données à l'aide d'une fonction définie par l'utilisateur

Présente les étapes permettant de déchiffrer des fichiers dans Object Storage et de charger les données dans des tables à l'aide d'une fonction de déchiffrement définie par l'utilisateur.

Pour effectuer ces étapes, vous devez au préalable avoir crypté les fichiers et les télécharger dans Object Storage. Cet exemple utilise un fichier CSV. Il est supposé que le fichier est crypté à l'aide de l'algorithme DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 et téléchargé vers le stockage d'objet cloud.

Pour plus d'informations sur la fonction ENCRYPT, reportez-vous à Fonction ENCRYPT.

Pour plus d'informations sur la génération d'une clé de cryptage, reportez-vous à DBMS_CRYPTO Operational Notes.

Pour déchiffrer et charger des données dans une table existante sur Autonomous Database à partir d'Object Storage, procédez comme suit :

  1. Connectez-vous à votre instance 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.

  3. Créez une fonction de callback de décryptage de fonction définie par l'utilisateur.

    Exemple :

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

    Cela crée la fonction de décryptage DECRYPTION_FUNC. Cette fonction déchiffre les données à l'aide d'un cryptage de flux ou de bloc avec une clé fournie par l'utilisateur. La clé fournie par l'utilisateur dans l'exemple est stockée dans Oracle Cloud Infrastructure Vault et est extraite dynamiquement en effectuant un appel REST vers le service Oracle Cloud Infrastructure Vault.

  4. Exécutez DBMS_CLOUD.COPY_DATA, indiquez l'option format encryption et indiquez la fonction définie par l'utilisateur que vous avez créée pour déchiffrer les données.
    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;
    /

    Cela décrypte le fichier ENCRYPTED.CSV dans Object Storage. Les données sont ensuite chargées dans la table CSV_COPY_DATA. La valeur de l'option encryption du paramètre format indique un nom de fonction défini par l'utilisateur à utiliser pour décrypter les données.

    Remarques :

    Vous devez disposer du privilège EXECUTE sur la fonction définie par l'utilisateur.

    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 obtenir des informations détaillées sur les paramètres, reportez-vous à Procédure COPY_DATA.

    Pour plus d'informations sur les paramètres format disponibles, vous pouvez les utiliser avec DBMS_CLOUD.COPY_DATA, reportez-vous à Options de format de package DBMS_CLOUD.