Criptografar Dados Durante a Exportação para o Object Storage

Você pode criptografar dados da tabela durante a exportação para o Object Storage.

Use o parâmetro format e a opção encryption com DBMS_CLOUD.EXPORT_DATA para criptografar dados quando você exportar do Autonomous Database para o Object Storage.

Observe o seguinte quando você exporta dados criptografados para o Object Storage:

  • A opção encryption só é suportada ao exportar dados do Autonomous Database para o Object Storage como CSV, JSON ou XML.

  • Quando a exportação inclui criptografia e compactação, a ordem das operações é: primeiro os dados são compactados, depois os dados são criptografados e, em seguida, é feito upload para o Object Storage.

  • Existem dois métodos de criptografia suportados:

    • Usando uma função definida pelo usuário.

    • Usando um algoritmo de criptografia especificado DBMS_CRYPTO.

      Consulte DBMS_CRYPTO para obter informações sobre as funções e os procedimentos criptográficos para criptografia e decriptografia.

Tópicos

Criptografar Dados Usando Algoritmos de Criptografia DBMS_CRYPTO

Mostra as etapas para criptografar dados usando algoritmos de criptografia DBMS_CRYPTO durante a exportação para o Cloud Object Storage.

Execute as seguintes etapas para criptografar dados durante a exportação para o Cloud Object Storage (este exemplo exporta dados da tabela para um arquivo CSV):

  1. Conecte-se à instância do Autonomous Database.

    Consulte Conectar-se ao Autonomous Database para obter mais informações.

  2. Armazene a credencial do Cloud Object Storage usando DBMS_CLOUD.CREATE_CREDENTIAL.

    Por exemplo:

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

    Os valores fornecidos para username e password dependem do serviço de Cloud Object Storage que você está usando.

    Consulte CREATE_CREDENTIAL Procedimento para obter mais informações.

    A criação de uma credencial para acessar o Oracle Cloud Infrastructure Object Store não será necessária se você ativar as credenciais do controlador de recursos. Para obter mais informações, consulte Usar o Controlador de Recursos para Acessar Recursos do Oracle Cloud Infrastructure.

  3. Crie uma credencial para armazenar a chave de criptografia (a chave de criptografia a ser usada para criptografar dados).

    Ao criptografar dados usando algoritmos de criptografia DBMS_CRYPTO, você armazena a chave de criptografia em uma credencial. A chave é especificada no campo password em uma credencial criada com DBMS_CLOUD.CREATE_CREDENTIAL.

    Por exemplo:

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

    Como alternativa, você pode criar uma credencial para armazenar a chave em um vault. Por exemplo:

    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;
    /
    Observação

    O parâmetro username especificado na credencial que armazena a chave pode ser qualquer string.

    Isso cria a credencial ENC_CRED_NAME, que é uma credencial de segredo do vault, na qual o segredo (chave de descriptografia/criptografia) é armazenado como segredo no Oracle Cloud Infrastructure Vault.

    Consulte CREATE_CREDENTIAL Procedimento para obter mais informações.

  4. Execute DBMS_CLOUD.EXPORT_DATA.

    Use o parâmetro format com a opção encryption. O tipo encryption especifica o algoritmo de criptografia DBMS_CRYPTO a ser usado para criptografar os dados da tabela e o valor credential_name é a credencial que especifica o segredo (chave de criptografia).

    Por exemplo:

    BEGIN
        DBMS_CLOUD.EXPORT_DATA (
            credential_name => 'OBJ_STORE_CRED',
            file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-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;
    /

    Isso criptografa e exporta os dados da tabela EMPLOYEES para um arquivo CSV.

    Consulte DBMS_CRYPTO Algoritmos para obter mais informações sobre algoritmos de criptografia.

    Neste exemplo, namespace-string corresponde ao namespace do armazenamento de objetos do Oracle Cloud Infrastructure e bucketname corresponde ao nome do bucket. Consulte Noções Básicas de Namespaces do serviço Object Storage para obter mais informações.

    Consulte EXPORT_DATA Procedure e DBMS_CLOUD Package Format Options para EXPORT_DATA para obter mais informações.

Depois de criptografar arquivos com DBMS_CLOUD.EXPORT_DATA, ao usar algoritmos de criptografia DBMS_CRYPTO para criptografar os arquivos, você tem estas opções para usar ou importar os arquivos exportados:

  • Você pode usar DBMS_CLOUD.COPY_DATA ou DBMS_CLOUD.COPY_COLLECTION com as mesmas opções de algoritmo de criptografia e a chave para decriptografar os arquivos.

    Consulte Descriptografar e Carregar Dados Usando Algoritmos DBMS_CRYPTO para obter mais informações.

  • Você pode consultar os dados em uma tabela externa fornecendo as mesmas opções de algoritmo de criptografia e a chave para descriptografar os arquivos, com qualquer um dos seguintes procedimentos:

    • DBMS_CLOUD.CREATE_EXTERNAL_TABLE

    • DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE

    • DBMS_CLOUD.CREATE_HYBRID_PART_TABLE

      Para DBMS_CLOUD.CREATE_HYBRID_PART_TABLE, essa opção só é aplicável aos arquivos do Object Storage.

    Consulte Descriptografar e Carregar Dados Usando Algoritmos DBMS_CRYPTO para obter mais informações.

  • Em um sistema que não seja um Autonomous Database, você pode usar o pacote DBMS_CRYPTO com as mesmas opções de algoritmo e a chave para decriptografar os arquivos.

    Observe que a chave é armazenada como VARCHAR2 na credencial do Autonomous Database, mas o DBMS_CRYPTO usa o tipo RAW para o parâmetro de chave.

    Consulte DBMS_CRYPTO Algoritmos para obter mais informações sobre algoritmos de criptografia.

Criptografar Dados com uma Função de Criptografia Definida pelo Usuário

Mostra as etapas para criptografar dados usando uma função de criptografia definida pelo usuário durante a exportação para o Cloud Object Storage.

Execute as seguintes etapas para criptografar dados durante a exportação para o Cloud Object Storage (este exemplo exporta dados da tabela para um arquivo CSV):

  1. Conecte-se à instância do Autonomous Database.

    Consulte Conectar-se ao Autonomous Database para obter mais informações.

  2. Armazene a credencial do Cloud Object Storage usando DBMS_CLOUD.CREATE_CREDENTIAL.

    Por exemplo:

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

    Os valores fornecidos para username e password dependem do serviço de Cloud Object Storage que você está usando.

    Consulte CREATE_CREDENTIAL Procedimento para obter mais informações.

    A criação de uma credencial para acessar o Oracle Cloud Infrastructure Object Store não será necessária se você ativar as credenciais do controlador de recursos. Para obter mais informações, consulte Usar o Controlador de Recursos para Acessar Recursos do Oracle Cloud Infrastructure.

  3. Crie uma função de callback definida pelo usuário para criptografar dados.

    Por exemplo:

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

    Isso cria a função de criptografia ENCRYPTION_FUNC. Essa função criptografa dados usando uma cifra de fluxo ou de bloco com uma chave fornecida pelo usuário.

    Observação

    Crie uma chave de criptografia a ser usada como um valor no parâmetro KEY. Consulte DBMS_CRYPTO Operational Notes para obter mais informações sobre como gerar a chave de criptografia.
  4. Execute DBMS_CLOUD.EXPORT_DATA com o parâmetro format, inclua a opção encryption e especifique um user_defined_function.

    Por exemplo:

    BEGIN
          DBMS_CLOUD.EXPORT_DATA (
            credential_name => 'OBJ_STORE_CRED',
            file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-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;
    /

    Isso criptografa os dados da consulta especificada na tabela EMP e exporta os dados como um arquivo CSV no Cloud Object Storage. O parâmetro format com o valor encryption especifica a função de criptografia definida pelo usuário a ser usada para criptografar os dados.

    Observação

    Você deve ter o privilégio EXECUTE na função de criptografia.

    Neste exemplo, namespace-string corresponde ao namespace do armazenamento de objetos do Oracle Cloud Infrastructure e bucketname corresponde ao nome do bucket. Consulte Noções Básicas de Namespaces do serviço Object Storage para obter mais informações.

    Consulte EXPORT_DATA Procedure e DBMS_CLOUD Package Format Options para EXPORT_DATA para obter mais informações.