Descriptografar Dados Durante a Importação 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 AI Database se os dados em seus arquivos de origem forem criptografados.

Observação: Esta opção só é suportada para arquivos do serviço Object Storage com menos de 4 GB.

Essa opção se aplica aos seguintes procedimentos:

Descriptografar e carregar dados com algoritmos DBMS_CRYPTO

Mostra as etapas para decriptografar arquivos criptografados do serviço Object Storage e carregar os dados em uma tabela no Autonomous AI 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 Observações Operacionais DBMS_CRYPTO para obter mais informações sobre como gerar uma chave de criptografia.

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

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

  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 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 secreta do vault, na qual o segredo (chave de decriptografia/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. Os dados são entã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 Algoritmos DBMS_CRYPTO 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.

    Para obter informações detalhadas sobre os parâmetros, consulte Procedimento COBY_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 de Pacote DBMS_CLOUD.

Decriptografar 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 Observações Operacionais DBMS_CRYPTO para obter mais informações sobre como gerar uma chave de criptografia.

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

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

  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 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. Os dados são entã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 é 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.

    Para obter informações detalhadas sobre os parâmetros, consulte Procedimento COBY_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 de Pacote DBMS_CLOUD.