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 serviço Object Storage:

  • A opção encryption só é suportada durante a exportação de 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.

  • 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 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 à sua instância do Autonomous Database.

    Consulte Estabelecer Conexão com o Autonomous Database para obter mais informações.

  2. Armazene a sua 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 Procedures para obter mais informações.

    Não será necessário criar uma credencial para acessar o Oracle Cloud Infrastructure Object Store se você ativar as credenciais do controlador de recursos. Consulte Usar o Controlador de Recursos para Acessar Recursos da Oracle Cloud Infrastructure 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;
    /

    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 que você especifica na credencial que armazena a chave pode ser qualquer string.

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

    Consulte CREATE_CREDENTIAL Procedures 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 é uma 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 é o namespace do Oracle Cloud Infrastructure Object Storage e bucketname é o 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 Opções de Formato de Pacote DBMS_CLOUD para EXPORT_DATA para obter mais informações.

Depois de criptografar arquivos com o 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 Decriptografar 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 decriptografar 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ó se aplica aos arquivos do serviço Object Storage.

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

  • Em um sistema que não é 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 um VARCHAR2 na credencial no Autonomous Database, mas 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 à sua instância do Autonomous Database.

    Consulte Estabelecer Conexão com o Autonomous Database para obter mais informações.

  2. Armazene a sua 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 Procedures para obter mais informações.

    Não será necessário criar uma credencial para acessar o Oracle Cloud Infrastructure Object Store se você ativar as credenciais do controlador de recursos. Consulte Usar o Controlador de Recursos para Acessar Recursos da Oracle Cloud Infrastructure 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. Essa função criptografa dados usando uma cifra de fluxo ou bloco com uma chave fornecida pelo usuário.

    Observação

    Crie uma chave de criptografia para 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 uma 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 os exporta 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 é o namespace do Oracle Cloud Infrastructure Object Storage e bucketname é o 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 Opções de Formato de Pacote DBMS_CLOUD para EXPORT_DATA para obter mais informações.