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

Vous pouvez déchiffrer et charger des données à partir de fichiers chiffré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.
Remarque

Cette option est uniquement prise en charge pour les fichiers Object Storage 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 Object Storage.

  • DBMS_CLOUD.COPY_COLLECTION

Rubriques

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

Présente les étapes de déchiffrement des fichiers cryptés à partir d'Object Storage 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 disposer de fichiers cryptés et les avoir téléchargés vers 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 chiffrement, 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.

    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é à l'aide de DBMS_CLOUD.CREATE_CREDENTIAL. Exemples :
    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.

    Cette opération 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 indiquez 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/namespace-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;
    /

    Cette opération déchiffre 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 à 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 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.

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

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

Pour pouvoir effectuer ces étapes, vous devez disposer de fichiers cryptés et les télécharger vers 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 chiffrement, 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.

    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 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;
      response             DBMS_CLOUD_TYPES.resp;
      l_response_json      JSON_ARRAY_T;
      l_response_json_obj  JSON_OBJECT_T;
      l_secret_id          VARCHAR2(4000) := '<secret_ocid>';
      l_key                VARCHAR2(4000);
    BEGIN
       response := DBMS_CLOUD.send_request (
                    credential_name => 'OCI$RESOURCE_PRINCIPAL',
                    uri             => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/' || l_secret_id,
                    method          => 'GET');
      l_response_json_obj := JSON_OBJECT_T.parse (DBMS_CLOUD.get_response_text(response));
      l_key := UTL_RAW.cast_to_varchar2 (UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw (l_response_json_obj.get_object('secretBundleContent').get_string('content'))));
     
      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 => l_key
        );
      RETURN l_decrypted_data;
    END decryption_func;
    /

    La fonction de décryptage DECRYPTION_FUNC est créée. Cette fonction déchiffre les données à l'aide d'un chiffrement de flux ou de blocs 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/namespace-string/b/bucketname/o/encrypted.csv',
        format          => json_object(
                             'type' value 'csv',
                             'encryption' value json_object('user_defined_function' value 'admin.decryption_func'))
      );
    end;
    /

    Cette opération déchiffre 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.

    Remarque

    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.