Descifrar datos al importarlos desde Object Storage

Puede descifrar y cargar datos de archivos cifrados almacenados en Object Storage. También puede descifrar los datos cifrados en Object Storage que utilice en una tabla externa.

Esta opción resulta útil al migrar de una base de datos local a una base de datos de IA autónoma si los datos de los archivos de origen están cifrados.

Nota: Esta opción solo está soportada para archivos de almacenamiento de objetos de menos de 4 GB.

Esta opción se aplica a los siguientes procedimientos:

Descifrar y cargar datos mediante algoritmos DBMS_CRYPTO

Muestra los pasos para descifrar archivos cifrados de Object Storage y cargar los datos en una tabla de la base de datos de IA autónoma (el paso de descifrado utiliza algoritmos DBMS_CRYPTO).

Como requisito, debe tener archivos cifrados y haber cargado los archivos en Object Storage. En este ejemplo se utiliza un archivo CSV y se supone que el archivo se cifra mediante el algoritmo DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 y se carga en Cloud Object Storage.

Consulte Función ENCRYPT para obtener más información sobre la función ENCRYPT.

Consulte las Notas operativas de DBMS_CRYPTO para obtener más información sobre la generación de una clave de cifrado.

Para descifrar y cargar datos en una tabla existente en la base de datos de IA autónoma desde Object Storage:

  1. Conéctese a su instancia de base de datos de IA autónoma.

  2. Almacene su credencial de Cloud Object Storage mediante DBMS_CLOUD.CREATE_CREDENTIAL.

    Por ejemplo:

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
         credential_name => 'OBJ_STORE_CRED',
         username        => 'user1@example.com',
         password        => 'password'
       );
     END;
     /
    

    Los valores que proporcione para username y password dependen del servicio de Cloud Object Storage que utilice.

    Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.

  3. Cree una credencial para almacenar la clave mediante DBMS_CLOUD.CREATE_CREDENTIAL. Por ejemplo:

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL (
         credential_name => 'ENC_CRED_NAME',
         username        => '*Any_username*',
         password        => 'password'
       );
     END;
     /
    

    Como alternativa, puede crear credenciales para almacenar la clave en un almacén. Por ejemplo:

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

    Nota: El parámetro username que especifique en la credencial que almacena la clave puede ser cualquier cadena.

    Esto crea la credencial ENC_CRED_NAME, que es una credencial secreta de almacén, donde el secreto (clave de descifrado/cifrado) se almacena como secreto en Oracle Cloud Infrastructure Vault.

    Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.

  4. Ejecute DBMS_CLOUD.COPY_DATA y especifique el algoritmo de cifrado DBMS_CRYPTO como método de descifrado.

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

    Esto descifra el archivo ENCRYPTED.CSV en Object Storage. Los datos luego se cargan en la tabla CSV_COPY_DATA. El valor de la opción encryption del parámetro format especifica un algoritmo de cifrado DBMS_CRYPTO que se utilizará para descifrar datos.

    Consulte Algoritmos DBMS_CRYPTO para obtener más información sobre los algoritmos de cifrado.

    En este ejemplo, *namespace-string* es el espacio en el que se almacenan objetos de Oracle Cloud Infrastructure y bucketname es el nombre del cubo. Consulte Descripción de los espacios de nombres de Object Storage para obtener más información.

    Para obtener información detallada sobre los parámetros, consulte Procedimiento COPY_DATA.

    Para obtener información detallada sobre los parámetros format disponibles, puede utilizar con DBMS_CLOUD.COPY_DATA. Consulte DBMS_CLOUD Package Format Options.

Descifrar y cargar datos con una función definida por el usuario

Muestra los pasos para descifrar archivos en Object Storage y cargar los datos en tablas mediante una función de descifrado definida por el usuario.

Como requisito para estos pasos, debe tener archivos cifrados y haber cargado los archivos en Object Storage. En este ejemplo se utiliza un archivo CSV y se supone que el archivo se cifra mediante el algoritmo DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 y se carga en Cloud Object Storage.

Consulte Función ENCRYPT para obtener más información sobre la función ENCRYPT.

Consulte las Notas operativas de DBMS_CRYPTO para obtener más información sobre la generación de una clave de cifrado.

Para descifrar y cargar datos en una tabla existente en la base de datos de IA autónoma desde Object Storage:

  1. Conéctese a su instancia de base de datos de IA autónoma.

  2. Almacene su credencial de Cloud Object Storage mediante DBMS_CLOUD.CREATE_CREDENTIAL.

    Por ejemplo:

     BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
         credential_name => 'OBJ_STORE_CRED',
         username        => 'user1@example.com',
         password        => 'password'
       );
     END;
     /
    

    Los valores que proporcione para username y password dependen del servicio de Cloud Object Storage que utilice.

    Consulte Procedimiento CREATE_CREDENTIAL para obtener más información.

  3. Cree una función de descifrado de llamada de función definida por el usuario.

    Por ejemplo:

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

    Esto crea la función de descifrado DECRYPTION_FUNC. Esta función descifra datos mediante un cifrado de flujo o bloque con una clave proporcionada por el usuario. La clave proporcionada por el usuario en el ejemplo se almacena en Oracle Cloud Infrastructure Vault y se recupera dinámicamente realizando una llamada de REST al servicio Oracle Cloud Infrastructure Vault.

  4. Ejecute DBMS_CLOUD.COPY_DATA y especifique la opción format encryption y especifique la función definida por el usuario que ha creado para descifrar los datos.

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

    Esto descifra el archivo ENCRYPTED.CSV en Object Storage. Los datos luego se cargan en la tabla CSV_COPY_DATA. El valor de la opción encryption del parámetro format especifica un nombre de función definido por el usuario que se utilizará para descifrar datos.

    Nota: Debe tener el privilegio EXECUTE en la función definida por el usuario.

    In this example, namespace-string is the Oracle Cloud Infrastructure object storage namespace and bucketname is the bucket name. Consulte Descripción de los espacios de nombres de Object Storage para obtener más información.

    Para obtener información detallada sobre los parámetros, consulte Procedimiento COPY_DATA.

    Para obtener información detallada sobre los parámetros format disponibles, puede utilizar con DBMS_CLOUD.COPY_DATA. Consulte DBMS_CLOUD Package Format Options.