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
Observação: Essa opção só é suportada para arquivos do serviço Object Storage com menos de 4 GB.
Essa opção se aplica aos seguintes procedimentos:
-
DBMS_CLOUD.COPY_DATA -
DBMS_CLOUD.CREATE_EXTERNAL_TABLE -
DBMS_CLOUD.CREATE_EXTERNAL_PART_TABLE -
DBMS_CLOUD.CREATE_HYBRID_PART_TABLEPara
DBMS_CLOUD.CREATE_HYBRID_PART_TABLE, essa opção só se aplica aos arquivos do serviço Object Storage. -
DBMS_CLOUD.COPY_COLLECTION
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:
-
Conecte-se à sua instância do Autonomous AI Database.
Consulte Estabelecer Conexão com o Autonomous AI Database para obter mais informações.
-
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
usernameepassworddependem do serviço de Cloud Object Storage que você está usando.Consulte Procedimento CREATE_CREDENTIAL 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.
-
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
Observação: O parâmetrousernameespecificado 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.
-
Execute
DBMS_CLOUD.COPY_DATAe especifique o algoritmo de criptografiaDBMS_CRYPTOcomo 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/namespace-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.CSVno Object Storage. Os dados são então carregados na tabelaCSV_COPY_DATA. O valor da opçãoencryptiondo parâmetroformatespecifica um algoritmo de criptografiaDBMS_CRYPTOa 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 ebucketnameé 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
formatdisponíveis, você pode usar comDBMS_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 serviço Object Storage:
-
Conecte-se à sua instância do Autonomous AI Database.
Consulte Estabelecer Conexão com o Autonomous AI Database para obter mais informações.
-
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
usernameepassworddependem do serviço de Cloud Object Storage que você está usando.Consulte Procedimento CREATE_CREDENTIAL 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.
-
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; response DBMS_CLOUD_TYPES.resp; l_response_json JSON_ARRAY_T; l_response_json_obj JSON_OBJECT_T; l_secret_id VARCHAR2(4000) := '<secret_ocid>'; l_key VARCHAR2(4000); BEGIN response := DBMS_CLOUD.send_request ( credential_name => 'OCI$RESOURCE_PRINCIPAL', uri => 'https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname/o/' || l_secret_id, method => 'GET'); l_response_json_obj := JSON_OBJECT_T.parse (DBMS_CLOUD.get_response_text(response)); l_key := UTL_RAW.cast_to_varchar2 (UTL_ENCODE.base64_decode(UTL_RAW.cast_to_raw (l_response_json_obj.get_object('secretBundleContent').get_string('content')))); 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 => l_key ); RETURN l_decrypted_data; END decryption_func; /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. -
Execute
DBMS_CLOUD.COPY_DATAe especifique a opçãoformatencryptione 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/namespace-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.CSVno Object Storage. Os dados são então carregados na tabelaCSV_COPY_DATA. O valor da opçãoencryptiondo parâmetroformatespecifica um nome de função definido pelo usuário a ser usado para decriptografar dados.Observação
Observação: Você deve ter o privilégioEXECUTEna função definida pelo usuário.Neste exemplo,
namespace-stringé o namespace do Oracle Cloud Infrastructure Object Storage ebucketnameé 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
formatdisponíveis, você pode usar comDBMS_CLOUD.COPY_DATA. Consulte Opções de Formato de Pacote DBMS_CLOUD.