Descifrado de datos durante la importación desde Object Storage

Puede descifrar y cargar datos de archivos cifrados almacenados en el almacenamiento de objetos. También puede descifrar 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 instancia de Autonomous Database si los datos de los archivos de origen están cifrados.

Note:

Esta opción solo está soportada para archivos de Object Storage de menos de 4 GB.

Esta opción se aplica a los siguientes procedimientos:

  • DBMS_CLOUD.COPY_DATA

  • DBMS_CLOUD.CREATE_EXTERNAL_TABLE

  • DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE

  • DBMS_CLOUD.CREATE_HYBRID_PART_TABLE

    Para DBMS_CLOUD.CREATE_HYBRID_PART_TABLE, esta opción solo se aplica a los archivos de Object Storage.

  • DBMS_CLOUD.COPY_COLLECTION

Descifrado y carga de datos mediante los algoritmos DBMS_CRYPTO

Muestra los pasos para descifrar archivos cifrados de Object Storage y cargar los datos en una tabla de Autonomous Database (el paso de descifrado utiliza algoritmos DBMS_CRYPTO).

Como requisito, debe tener archivos cifrados y cargar 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 Autonomous Database desde Object Storage:

  1. Conéctese a la instancia de Autonomous Database.
  2. Almacene la 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;
    /

    Note:

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

    De esta forma, se descifra el archivo ENCRYPTED.CSV en Object Storage. A continuación, los datos se cargan en la tabla CSV_COPY_DATA. El valor de opción encryption del parámetro format especifica un algoritmo de cifrado DBMS_CRYPTO que se utilizará para descifrar datos.

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

    En este ejemplo, namespace-string es el espacio de nombres de almacenamiento de 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 utilizarlos con DBMS_CLOUD.COPY_DATA, consulte .

Descifrado y carga de 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 realizar estos pasos, debe tener archivos cifrados y cargar 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 Autonomous Database desde Object Storage:

  1. Conéctese a la instancia de Autonomous Database.
  2. Almacene la 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 devolución de llamada de descifrado de función definida por 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 los 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 de forma dinámica mediante una llamada 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;
    /

    De esta forma, se descifra el archivo ENCRYPTED.CSV en Object Storage. A continuación, los datos 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 los datos.

    Note:

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

    En este ejemplo, namespace-string es el espacio de nombres de almacenamiento de 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 utilizarlos con DBMS_CLOUD.COPY_DATA, consulte DBMS_CLOUD Opciones de formato del paquete.