Cifrado de datos al exportar a Object Storage

Puede cifrar los datos de la tabla al exportar a Object Storage.

Utilice el parámetro format y la opción encryption con DBMS_CLOUD.EXPORT_DATA para cifrar datos al exportar desde Autonomous Database a Object Storage.

Tenga en cuenta lo siguiente al exportar datos cifrados a Object Storage:

  • La opción encryption solo está soportada al exportar datos de Autonomous Database a Object Storage como CSV, JSON o XML.

  • Cuando la exportación incluye tanto cifrado como compresión, el orden de las operaciones es el siguiente: primero se comprimen los datos, después se cifran los datos y, a continuación, se cargan en Object Storage.

  • Hay dos métodos de cifrado soportados:

    • Uso de una función definida por el usuario.

    • Mediante un algoritmo de cifrado especificado en DBMS_CRYPTO.

      Consulte DBMS_CRYPTO para obtener información sobre las funciones y los procedimientos criptográficos para el cifrado y el descifrado.

Cifrado de datos mediante algoritmos de cifrado DBMS_CRYPTO

Muestra los pasos para cifrar datos mediante algoritmos de cifrado DBMS_CRYPTO al exportar a Cloud Object Storage.

Realice los siguientes pasos para cifrar datos durante la exportación a Cloud Object Storage (en este ejemplo, se exportan datos de tabla a un archivo CSV):

  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 de cifrado (la clave de cifrado que se utilizará para cifrar los datos).

    Al cifrar datos mediante algoritmos de cifrado DBMS_CRYPTO, almacena la clave de cifrado en una credencial. La clave se especifica en el campo password de una credencial creada con DBMS_CLOUD.CREATE_CREDENTIAL.

    Por ejemplo:

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

    Utilice el parámetro format con la opción encryption. El tipo encryption especifica el algoritmo de cifrado DBMS_CRYPTO que se utilizará para cifrar los datos de la tabla y el valor credential_name es la credencial que especifica el secreto (clave de cifrado).

    Por ejemplo:

    BEGIN
        DBMS_CLOUD.EXPORT_DATA (
            credential_name => 'OBJ_STORE_CRED',
            file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namepace-string/b/bucketname/o/encrypted.csv',
            query           => 'SELECT * FROM ADMIN.employees',
            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 cifra y exporta los datos de la tabla EMPLOYEES a un archivo CSV.

    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.

    Consulte EXPORT_DATA Procedure y DBMS_CLOUD Package Format Options for EXPORT_DATA para obtener más información.

Después de cifrar archivos con DBMS_CLOUD.EXPORT_DATA, cuando utiliza algoritmos de cifrado DBMS_CRYPTO para cifrar los archivos, tiene estas opciones para utilizar o importar los archivos exportados:

  • Puede utilizar DBMS_CLOUD.COPY_DATA o DBMS_CLOUD.COPY_COLLECTION con las mismas opciones de algoritmo de cifrado y la misma clave para descifrar los archivos.

    Consulte Descifrado y carga de datos mediante los algoritmos DBMS_CRYPTO para obtener más información.

  • Puede consultar los datos en una tabla externa proporcionando las mismas opciones de algoritmo de cifrado y la clave para descifrar los archivos, con cualquiera de los siguientes procedimientos:

    • 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.

    Consulte Descifrado y carga de datos mediante los algoritmos DBMS_CRYPTO para obtener más información.

  • En un sistema que no sea una instancia de Autonomous Database, puede utilizar el paquete DBMS_CRYPTO con las mismas opciones de algoritmo y la clave para descifrar los archivos.

    Tenga en cuenta que la clave se almacena como VARCHAR2 en la credencial de Autonomous Database, pero DBMS_CRYPTO utiliza el tipo RAW para el parámetro de clave.

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

Cifrado de datos con una función de cifrado definida por el usuario

Muestra los pasos para cifrar datos mediante una función de cifrado definida por el usuario al exportar a Cloud Object Storage.

Realice los siguientes pasos para cifrar datos durante la exportación a Cloud Object Storage (en este ejemplo, se exportan datos de tabla a un archivo CSV):

  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 definida por el usuario para cifrar los datos.

    Por ejemplo:

    CREATE OR REPLACE FUNCTION encryption_func (data IN BLOB)
      RETURN BLOB
      IS
          l_encrypted_data BLOB;
           BEGIN   
         DBMS_LOB.CREATETEMPORARY (l_encrypted_data, TRUE, DBMS_LOB.CALL);
         DBMS_CRYPTO.ENCRYPT (
             dst => l_encrypted_data,
             src => data,
             typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
             key => 'encryption key'
          );
         RETURN l_encrypted_data;
    END encryption_func;
    /

    Esto crea la función de cifrado ENCRYPTION_FUNC. Esta función cifra los datos mediante un cifrado de flujo o bloque con una clave proporcionada por el usuario.

    Note:

    Debe crear una clave de cifrado para utilizarla como valor en el parámetro KEY. Consulte las Notas operativas de DBMS_CRYPTO para obtener más información sobre la generación de la clave de cifrado.
  4. Ejecute DBMS_CLOUD.EXPORT_DATA con el parámetro format, incluya la opción encryption y especifique user_defined_function.

    Por ejemplo:

    BEGIN
          DBMS_CLOUD.EXPORT_DATA (
            credential_name => 'OBJ_STORE_CRED',
            file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namepace-string/b/bucketname/o/encrypted.csv',
            query           => 'SELECT * FROM ADMIN.emp',
            format          => json_object( 
                                  'type' value 'csv', 
                                  'encryption' value json_object('user_defined_function' value 'admin.encryption_func'))
          );
    END;
    /

    Esto cifra los datos de la consulta especificada en la tabla EMP y exporta los datos como un archivo CSV en Cloud Object Storage. El parámetro format con el valor encryption especifica la función de cifrado definida por el usuario que se utilizará para cifrar los datos.

    Note:

    Debe tener el privilegio EXECUTE en la función 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.

    Consulte EXPORT_DATA Procedure y DBMS_CLOUD Package Format Options for EXPORT_DATA para obtener más información.