Descriptografar Dados ao Importar do Serviço Object Storage

Você pode decriptografar e carregar dados de arquivos criptografados armazenados no Object Storage. Você também pode decriptografar dados criptografados no Object Storage que usa em uma tabela externa.

Essa opção é útil ao migrar de um banco de dados local para um Autonomous Database se os dados em seus arquivos de origem forem criptografados.

Observação:

Essa opção só é suportada para arquivos do Object Storage com menos de 4 GB.

Esta opção é aplicável aos seguintes procedimentos:

  • DBMS_CLOUD.COPY_DATA

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

  • DBMS_CLOUD.COPY_COLLECTION

Descriptografar e Carregar Dados Usando Algoritmos DBMS_CRYPTO

Mostra as etapas para decriptografar arquivos criptografados do Object Storage e carregar os dados em uma tabela no Autonomous Database (a etapa de decriptografia usa algoritmos DBMS_CRYPTO).

Como pré-requisito, você deve ter arquivos criptografados e fazer upload dos arquivos no Object Storage. Este exemplo usa um arquivo CSV e presume-se que o arquivo seja criptografado usando o algoritmo DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 e carregado no Cloud Object Storage.

Consulte Função ENCRYPT para obter mais informações sobre a função ENCRYPT.

Consulte DBMS_CRYPTO Observações Operacionais para obter mais informações sobre como gerar uma chave de criptografia.

Para decriptografar e carregar dados em uma tabela existente no Autonomous Database do Object Storage:

  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 usando 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 credenciais 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 Procedimento CREATE_CREDENTIAL para obter mais informações.

  4. Execute DBMS_CLOUD.COPY_DATA e especifique o algoritmo de criptografia DBMS_CRYPTO como método de decriptografia.
    BEGIN
     DBMS_CLOUD.COPY_DATA (
       table_name       => 'CSV_COPY_DATA',
       credential_name  => 'OBJ_STORE_CRED',
       file_uri_list    => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namepace-string/b/bucketname/o/encrypted.csv',
       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 decriptografa o arquivo ENCRYPTED.CSV no Object Storage. Em seguida, os dados são carregados na tabela CSV_COPY_DATA. O valor da opção encryption do parâmetro format especifica um algoritmo de criptografia DBMS_CRYPTO a ser usado para decriptografar dados.

    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.

    Para obter informações detalhadas sobre os parâmetros, consulte Procedimento COPY_DATA.

    Para obter informações detalhadas sobre os parâmetros format disponíveis, você pode usar com DBMS_CLOUD.COPY_DATA, consulte .

Descriptografar e Carregar Dados com uma Função Definida pelo Usuário

Mostra as etapas para decriptografar arquivos no Object Storage e carregar os dados em tabelas usando uma função de decriptografia definida pelo usuário.

Como pré-requisito para essas etapas, você deve ter arquivos criptografados e fazer upload dos arquivos no Object Storage. Este exemplo usa um arquivo CSV e presume-se que o arquivo seja criptografado usando o algoritmo DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5 e carregado no Cloud Object Storage.

Consulte Função ENCRYPT para obter mais informações sobre a função ENCRYPT.

Consulte DBMS_CRYPTO Observações Operacionais para obter mais informações sobre como gerar uma chave de criptografia.

Para decriptografar e carregar dados em uma tabela existente no Autonomous Database do Object Storage:

  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 de decriptografia de função definida pelo usuário.

    Por exemplo:

    CREATE OR REPLACE FUNCTION decryption_func(data IN BLOB)
    RETURN BLOB
    IS
      l_decrypted_data BLOB;
    BEGIN
      DBMS_LOB.createtemporary(l_decrypted_data, TRUE, DBMS_LOB.CALL);
      DBMS_CRYPTO.decrypt(
          dst => l_decrypted_data,
          src => data,
          typ => DBMS_CRYPTO.ENCRYPT_AES256 + DBMS_CRYPTO.CHAIN_CBC + DBMS_CRYPTO.PAD_PKCS5,
          key => 'encryption key'
        );
      RETURN l_decrypted_data;
    END decryption_callback;
    /

    Isso cria a função de decriptografia DECRYPTION_FUNC. Esta função decriptografa dados usando uma cifra de fluxo ou bloco com uma chave fornecida pelo usuário. A chave fornecida pelo usuário no exemplo é armazenada no Oracle Cloud Infrastructure Vault e é recuperada dinamicamente fazendo uma chamada REST para o serviço Oracle Cloud Infrastructure Vault.

  4. Execute DBMS_CLOUD.COPY_DATA e especifique a opção format encryption e especifique a função definida pelo usuário que você criou para decriptografar os dados.
    BEGIN
     DBMS_CLOUD.COPY_DATA (
        table_name      => 'CSV_COPY_DATA',
        credential_name => 'OBJ_STORE_CRED',
        file_uri_list   => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namepace-string/b/bucketname/o/encrypted.csv',
        format          => json_object(
                             'type' value 'csv',
                             'encryption' value json_object('user_defined_function' value 'admin.decryption_func'))
      );
    end;
    /

    Isso decriptografa o arquivo ENCRYPTED.CSV no Object Storage. Em seguida, os dados são carregados na tabela CSV_COPY_DATA. O valor da opção encryption do parâmetro format especifica um nome de função definido pelo usuário a ser usado para decriptografar dados.

    Observação:

    Você deve ter o privilégio EXECUTE na função definida pelo usuário.

    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.

    Para obter informações detalhadas sobre os parâmetros, consulte Procedimento COPY_DATA.

    Para obter informações detalhadas sobre os parâmetros format disponíveis, você pode usar com DBMS_CLOUD.COPY_DATA, consulte Opções de Formato do Pacote DBMS_CLOUD.