Criptografar Dados ao Exportar para o Serviço Object Storage

Você pode criptografar dados da tabela ao exportar para o Object Storage.

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

Observe o seguinte ao exportar 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, são carregados no Object Storage.

  • Há 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 funções e procedimentos criptográficos para criptografia e decriptografia.

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 ao exportar para o Cloud Object Storage (este exemplo exporta dados da tabela para um arquivo CSV):

  1. Estabeleça conexão com a instância do Autonomous Database.
  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 Procedimento CREATE_CREDENTIAL para obter mais informações.

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

    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 Procedimento EXPORT_DATA e DBMS_CLOUD Opções de Formato de Pacote 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 no 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 ao exportar para o Cloud Object Storage (este exemplo exporta dados da tabela para um arquivo CSV):

  1. Estabeleça conexão com a instância do Autonomous Database.
  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 Procedimento CREATE_CREDENTIAL para obter mais informações.

  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. Esta função criptografa dados usando uma cifra de fluxo ou bloco com uma chave fornecida pelo usuário.

    Observação:

    Você deve criar uma chave de criptografia a ser usada como um valor no parâmetro KEY. Consulte DBMS_CRYPTO Observações Operacionais 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/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;
    /

    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 Procedimento EXPORT_DATA e DBMS_CLOUD Opções de Formato de Pacote para EXPORT_DATA para obter mais informações.