terça-feira, 19 de abril de 2022

ORACLE - CRIAR DIRETÓRIO NO BANCO DE DADOS


Quando criamos um diretório no oracle, estamos atribuindo um alias, apelido, a um diretório real criado no sistema operacional. Com esse alias, poderemos acessar o diretório do sistema operacional a partir de nossa aplicação.

São 3 passos simples:

  1. Criar diretório no sistem operacional.
  2. Criar diretório no oracle.
  3. Conceder os privilégios ao usuário que acessará o diretório.

DIRETÓRIO NO SISTEMA OPERACIONAL


Crie o diretório no sistema operacional onde os arquivos serão armazenados.

mkdir -p /home/oracle/apex/app_files

Obs: Certifique-se de que o diretório do sistema operacional tenha as permissões corretas de leitura e gravação para os processos do oracle.


DIRETÓRIO NO ORACLE


Como SYS ou SYSTEM logue no container desejado e crie o diretório no oracle que será o alias para nosso diretório no sistema operacional.

alter session set container = pdb1;

create directory app_files as '/home/oracle/apex/app_files';

Obs: No exemplo, o diretório no oracle, app_files, tem o mesmo nome do diretório no sistema operacional, mas isso não é obrigatório.


CONCEDER PRIVILÉGIOS


Conceda privilégios ao usuário que acessará o diretório.

grant read,write on directory app_files to app;

Agora, se logar no usuário APP e consultar a view all_directories notará que ele tem acesso ao diretório app_files.



Mais informações sobre directories no oracle:

CREATE DIRECTORY

domingo, 17 de abril de 2022

OBTER CERTIFICADOS A PARTIR DO NAVEGADOR WEB


Para fazer requisições seguras a partir do código PL/SQL é necessário obter o certificado da url que queremos acessar via código. A maneira mais fácil é obtê-lo é através do navegador. No exemplo, a url será https://www.google.com. Vejamos como baixar o certificado usando o chrome.


Clique no ícone do cadeado. Depois em "A conexão é segura". E em "o certificado é válido".



 

Clique em "Caminho de certificação", selecione o certificado e clique em "Exibir Certificado". Depois em "Detalhes" e "Copiar para arquivo".




Será aberta uma tela de boas-vindas. Clique em "Avançar" e selecione a opção "Base-64 encoded X.509 (.CER)" 



            
      
Clique em "Procurar". Dê um nome para o certificado e depois clique em "Concluir".








  






PL/SQL - COMO FAZER REQUISIÇÕES HTTPS

  

Um belo dia, estamos desenvolvendo nosso sistema e nos deparamos com a necessidade de fazer requisições https a partir do código PL/SQL. Daí pensamos: Sem problemas! Sendo bons profissionais, pesquisamos, como manda o figurino, na documentação oficial, mas, ao folhear dezenas de páginas, logo bate a sensação de que ela é demasiado densa para uma tarefa aparentemente tão simples. Sendo realistas com nossos prazos, buscamos aquele bloco de código amigo que deve estar nos esperando perdido em algum lugar da internet. Afinal, não é possível que ninguém nunca tenha feito uma requisição dentro de um bloco PLSQL! A felicidade que sentimos ao encontrá-lo rapidamente é substituída pela decepção de ver os erros explodindo na tela. Sendo assim, entendemos que é hora de tomar uma água e fazer o café porque a tarefa não será tão simples.

Nesse artigo vamos descrever os passos necessários para fazer nossas tão desejadas requisições. São 3 ações principas: 

  1. O usuário que fará a requisição precisa de grant de execução na package utl_http.
  2. É necessário configurar ACLs.
  3. Para requisições https, cada url alvo deverá ter seu certificado guardado no servidor de banco de dados em um wallet.

PACKAGE UTL_HTTP


Logue no banco de dados como SYS e conceda ao usuário que fará as requisições grant de execução na package utl_http.


grant execute on utl_http to APP;
Obs: Não esqueça de se certificar de que está no container ao qual o usuário pertence. Se não estiver, uma forma de conectar é:
alter session set container = pdb1;


CONFIGURAR ACL

A partir do Oracle 11g, o acesso a serviço de rede se dá por ACL, Listas de Controle de Acesso. Essas listas indicam quais usuários acessam quais recursos de rede. Para isso, utilizamos a package DBMS_NETWORK_ACL_ADMIN. Basicamente, vamos criar uma Lista de Controle de Acesso e atribuir o host, ou os hosts, a essa lista. Execute o comando abaixo como SYS ou SYSTEM.

    

Obs: Perceba que usamos o mesmo nome de arquivo, network_services.xml, tanto em dbms_network_acl_admin.create_acl como em dbms_network_acl_admin.assign_acl.

Se, posteriormente, você desejar criar ACL para outro usuário do banco, pode executar apenas o seguinte trecho:
Agora nosso código amigo já consegue fazer requisições http!



CRIAR WALLETS


Chegou a hora de fazer requisições https. Mas, para isso, vamos precisar de alguns passos adicionais:
  1. Obter o certificado da url que desejamos acessar.
  2. Criar um oracle wallet para armazenar o certificado.

Se não souber como obter o certificado, leia o artigo: OBTER CERTIFICADOS A PARTIR DO NAVEGADOR WEB

Agora que temos nosso certificado, vamos salvá-lo em algum diretório no nosso servidor. Nesse exemplo, em /home/oracle. 

Vamos criar um diretório onde adicionaremos nosso wallet. 

mkdir -p u01/app/oracle/admin/cdb/wallet

Usando o utilitário orapki, vamos criar o wallet propiamente dito.

orapki wallet create -wallet /u01/app/oracle/admin/cdb/wallet -pwd Adm1n@2022 -auto_login


Atenção!
Aqui usamos a senha Adm1n@2022. O erro "Unable to save wallet at u01/app/oracle/admin/cdb/wallet" pode ser disparado se a senha não satisfizer os requisitos necessários que são: mínimos de 8 caracteres com letras e números.

Vamos adicionar o certificado que baixamos e está em /home/oracle no wallet.

orapki wallet add -wallet /u01/app/oracle/admin/cdb/wallet -trusted_cert -cert "/home/oracle/google-certificado.cer" -pwd Adm1n@2022

Se quisermos adicionar mais certificados ao nosso wallet, basta repetir esse útimo passo.

Tudo pronto para fazer nossa requisição https! Mas, antes, um último detalhe. Precisamos acrescentar uma linha ao nosso código.

utl_http.set_wallet('file:/u01/app/oracle/admin/cdb/wallet', 'Adm1n@2022');


Por fim, nosso código pronto para a tão esperada requisição https:

  

Espero que tenha ajudado a superar esse desafio. Seguem alguns links que podem ajudar a entender mais sobre o assunto:

    

UTL_HTTP and SSL (HTTPS) using Oracle Wallets

Fine-Grained Access to Network Services in Oracle Database 11g Release 1

Oracle UTL_HTTP Package

Oracle ACL Tips


    

    



    












APEX - APLICAÇÃO COM BARRA DE PESQUISA

Uma funcionalidade interessante que encontramos em algumas aplicações é a barra de pesquisa, que permite fazer pesquisas em toda a apli...