Cifrado de datos durante la exportación 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 los datos al exportar de 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 el cifrado como la compresión, el orden de las operaciones es: primero se comprimen los datos, a continuación, 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 DBMS_CRYPTO.

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

Temas

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 al exportar a Cloud Object Storage (este ejemplo exporta datos de tabla a un archivo CSV):

  1. Conéctese a la instancia de Autonomous Database.

    Consulte Conexión a Autonomous Database para obtener más información.

  2. Store 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.

    La creación de una credencial para acceder al almacén de objetos de Oracle Cloud Infrastructure no es necesaria si activa las credenciales de la entidad de recurso. Consulte Uso de la principal de recurso para acceder a los recursos de Oracle Cloud Infrastructure 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;
    /

    Como alternativa, puede crear una credencial 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.

    De esta forma se 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.EXPORT_DATA.

    Utilice el parámetro format con la opción encryption. El tipo encryption especifica el algoritmo de cifrado DBMS_CRYPTO que se va a utilizar para cifrar los datos de la tabla y el valor credential_name es una 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 Procedimiento EXPORT_DATA y Opciones de formato del paquete DBMS_CLOUD para EXPORT_DATA para obtener más información.

Después de cifrar archivos con DBMS_CLOUD.EXPORT_DATA, al utilizar algoritmos de cifrado DBMS_CRYPTO para cifrar los archivos, tiene estas opciones para utilizar o importar los archivos que ha exportado:

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

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

  • Puede consultar los datos de 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 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 al exportar a Cloud Object Storage (este ejemplo exporta datos de tabla a un archivo CSV):

  1. Conéctese a la instancia de Autonomous Database.

    Consulte Conexión a Autonomous Database para obtener más información.

  2. Store 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.

    La creación de una credencial para acceder al almacén de objetos de Oracle Cloud Infrastructure no es necesaria si activa las credenciales de la entidad de recurso. Consulte Uso de la principal de recurso para acceder a los recursos de Oracle Cloud Infrastructure para obtener más información.

  3. Cree una función de devolución de llamada definida por 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.

    Nota

    Debe crear una clave de cifrado para utilizarla como valor en el parámetro KEY. Consulte las DBMS_CRYPTO Notas operativas 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;
    /

    De esta forma, se cifran los datos de la consulta especificada en la tabla EMP y se exportan 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.

    Nota

    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 Procedimiento EXPORT_DATA y Opciones de formato del paquete DBMS_CLOUD para EXPORT_DATA para obtener más información.