Déchiffrer les données lors de l'importation à partir du stockage d'objets

Vous pouvez déchiffrer et charger des données à partir de fichiers chiffrés stockés dans le stockage d'objets. Vous pouvez également déchiffrer des données chiffrées sur le stockage d'objets que vous utilisez dans une table externe.

Cette option est utile lors de la migration d'une base de données sur place vers une base de données Autonomous Database si les données de vos fichiers sources sont chiffrées.

Note :

Cette option n'est prise en charge que pour les fichiers de stockage d'objets de moins de 4 Go.

Cette option s'applique aux 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 s'applique uniquement aux fichiers de stockage d'objets.

  • DBMS_CLOUD.COPY_COLLECTION

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

Affiche les étapes de déchiffrement des fichiers chiffrés à partir du stockage d'objets et de chargement des données dans une table sur Autonomous Database (l'étape de déchiffrement utilise des algorithmes DBMS_CRYPTO).

Vous devez au préalable avoir des fichiers chiffrés et les avoir chargés dans le stockage d'objets. Cet exemple utilise un fichier CSV et il est supposé que le fichier est chiffré à l'aide de l'algorithme DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 et chargé dans le stockage d'objets en nuage.

Voir Fonction ENCRYPT pour plus d'informations sur la fonction ENCRYPT.

Voir DBMS_CRYPTO Notes opérationnelles pour plus d'informations sur la génération d'une clé de chiffrement.

Pour déchiffrer et charger des données dans une table existante sur Autonomous Database à partir du stockage d'objets :

  1. Connectez-vous à votre instance de base de données autonome.
  2. Stockez vos données d'identification du service de stockage d'objets en nuage à 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 que vous indiquez pour username et password dépendent du service de stockage d'objets en nuage que vous utilisez .

    Pour plus d'informations, voir Procédure CREATE_CREDENTIAL.

  3. Créez des données 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 données d'identification pour stocker la clé dans une chambre forte. 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;
    /

    Note :

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

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

    Pour plus d'informations, voir Procédure CREATE_CREDENTIAL.

  4. Exécutez DBMS_CLOUD.COPY_DATA et spécifiez l'algorithme de chiffrement DBMS_CRYPTO comme méthode de déchiffrement.
    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échiffre le fichier ENCRYPTED.CSV dans le stockage d'objets. Les données sont ensuite chargées dans la table CSV_COPY_DATA. La valeur de l'option encryption du paramètre format spécifie un algorithme de chiffrement DBMS_CRYPTO à utiliser pour déchiffrer les données.

    Voir Algorithmes DBMS_CRYPTO pour plus d'informations sur les algorithmes de chiffrement.

    Dans cet exemple, namespace-string est l'espace de noms du stockage d'objets pour Oracle Cloud Infrastructure et bucketname est le nom du seau. Pour plus d'informations, voir Présentation des espaces de noms du stockage d'objets.

    Pour des informations détaillées sur les paramètres, voir Procédure COPY_DATA.

    Pour des informations détaillées sur les paramètres format disponibles, vous pouvez les utiliser avec DBMS_CLOUD.COPY_DATA, voir .

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

Affiche les étapes de déchiffrement des fichiers dans le stockage d'objets et de chargement des données dans des tables à l'aide d'une fonction de déchiffrement définie par l'utilisateur.

Vous devez au préalable avoir des fichiers chiffrés et les charger dans le stockage d'objets. Cet exemple utilise un fichier CSV et il est supposé que le fichier est chiffré à l'aide de l'algorithme DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 et chargé dans le stockage d'objets en nuage.

Voir Fonction ENCRYPT pour plus d'informations sur la fonction ENCRYPT.

Voir DBMS_CRYPTO Notes opérationnelles pour plus d'informations sur la génération d'une clé de chiffrement.

Pour déchiffrer et charger des données dans une table existante sur Autonomous Database à partir du stockage d'objets :

  1. Connectez-vous à votre instance de base de données autonome.
  2. Stockez vos données d'identification du service de stockage d'objets en nuage à 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 que vous indiquez pour username et password dépendent du service de stockage d'objets en nuage que vous utilisez .

    Pour plus d'informations, voir Procédure CREATE_CREDENTIAL.

  3. Créez une fonction de rappel de déchiffrement de fonction définie par l'utilisateur.

    Par 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échiffrement DECRYPTION_FUNC. Cette fonction déchiffre les données à l'aide d'un code 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 et spécifiez l'option format encryption et spécifiez 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échiffre le fichier ENCRYPTED.CSV dans le stockage d'objets. Les données sont ensuite chargées dans la table CSV_COPY_DATA. La valeur de l'option encryption du paramètre format spécifie un nom de fonction défini par l'utilisateur à utiliser pour déchiffrer les données.

    Note :

    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 du stockage d'objets pour Oracle Cloud Infrastructure et bucketname est le nom du seau. Pour plus d'informations, voir Présentation des espaces de noms du stockage d'objets.

    Pour des informations détaillées sur les paramètres, voir Procédure COPY_DATA.

    Pour des informations détaillées sur les paramètres format disponibles, vous pouvez les utiliser avec DBMS_CLOUD.COPY_DATA, voir DBMS_CLOUD Options de format de l'ensemble.