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 service de stockage d'objets. Vous pouvez également déchiffrer des données chiffrées dans le service de 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 d'IA autonome 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

Rubriques

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 de la base de données d'IA autonome (l'étape de déchiffrement utilise des algorithmes DBMS_CRYPTO).

Vous devez au préalable avoir chiffré les fichiers 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 votre stockage d'objets en nuage.

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

Voir Notes opérationnellesDBMS_CRYPTO 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 AI Database à partir du stockage d'objets :

  1. Connectez-vous à votre instance de base de données Autonomous AI Database.

    Pour plus d'informations, voir Se connecter à Autonomous AI Database.

  2. Stockez vos données d'identification du service de stockage d'objets en nuage à 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 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édureCREATE_CREDENTIAL.

    La création de données d'identification pour accéder au magasin d'objets Oracle Cloud Infrastructure n'est pas requise si vous activez les données d'identification du principal de ressource. Pour plus d'informations, voir Utiliser un principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

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

    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.

    Pour plus d'informations sur les algorithmes de chiffrement, voir Algorithmes DBMS_CRYPTO.

    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édureCOPY_DATA.

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

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.

Pour ces étapes, vous devez disposer de 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 votre stockage d'objets en nuage.

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

Voir Notes opérationnellesDBMS_CRYPTO 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 AI Database à partir du stockage d'objets :

  1. Connectez-vous à votre instance de base de données Autonomous AI Database.

    Pour plus d'informations, voir Se connecter à Autonomous AI Database.

  2. Stockez vos données d'identification du service de stockage d'objets en nuage à 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 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édureCREATE_CREDENTIAL.

    La création de données d'identification pour accéder au magasin d'objets Oracle Cloud Infrastructure n'est pas requise si vous activez les données d'identification du principal de ressource. Pour plus d'informations, voir Utiliser un principal de ressource pour accéder aux ressources Oracle Cloud Infrastructure.

  3. Créer une fonction de rappel de déchiffrement 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;
    /

    Cela crée la fonction de déchiffrement DECRYPTION_FUNC. Cette fonction déchiffre les données à l'aide d'un chiffrement 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 extraite dynamiquement en effectuant un appel REST au 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/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;
    /

    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édureCOPY_DATA.

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