DEV Community

Cover image for Saiba de qual IP estão saindo as suas chamadas REST feitas via Banco de Dados Oracle/APEX
Valter Zanchetti Filho
Valter Zanchetti Filho

Posted on

Saiba de qual IP estão saindo as suas chamadas REST feitas via Banco de Dados Oracle/APEX

Já faz tempo que você tem vem utilizando o UTL_HTTP direto do banco de dados e o o MAKE_REST_REQUEST do APEX. Porém, certo dia, você precisa fazer uma chamada REST para um fornecedor que não aceita qualquer conexão, o firewall dele só aceita os IPs previamente liberados.

Ele te pergunta qual o seu IP público e você fica mudo porque está acessando o banco de dados pelo IP interno e não faz ideia de qual seja o IP pelo qual ele sai para a internet. É, aconteceu comigo também. Vou colocar a solução aqui. Coisa bem simples e rápida.

A primeira coisa que iremos fazer é uma chamada HTTP para o ipify. Ele vai retornar o teu IP como resposta.

SET SERVEROUTPUT ON

DECLARE
  l_response CLOB;
BEGIN

--Se estiver na rodando em Autonomous Database, você precisa trocar para HTTPS.
  l_response := UTL_HTTP.REQUEST('http://api.ipify.org');
  DBMS_OUTPUT.PUT_LINE('Meu IP: ' || l_response);
END;
Enter fullscreen mode Exit fullscreen mode

É isso. O IP retornado pelo ipify é o IP público que o seu Banco de Dados Oracle está usando para acessar a internet. Esse é o IP que você pode enviar ao seu fornecedor para que ele seja liberado na whitelist.

Teve algum erro de permissão para acessar? Peça para o DBA liberar o ipify para o seu owner. Não tem DBA? Pode seguir com os comandos abaixo com SYS (se estiver em ambiente de produção é bom que entenda o que fazem os comando abaixo, para não correr risco de perder qualquer configuraçao):

SELECT * FROM DBA_NETWORK_ACLS;

    BEGIN
    DBMS_NETWORK_ACL_ADMIN.CREATE_ACL ( acl => 'ipify.xml'
                                      , description => 'Permissoes para acessar a api.ipify.org'
                                      , principal => 'YOUR_OWNER'
                                      , is_grant => TRUE
                                      , privilege => 'connect');
    END;

    BEGIN
    DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('ipify.xml', 
                                      '*.ipify.org');
    END;

    BEGIN
    DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE (
    acl          => 'ipify.xml',                
    principal    => 'YOUR_OWNER',
    is_grant     => TRUE, 
    privilege    => 'connect',
    position     => null);
   END;

Enter fullscreen mode Exit fullscreen mode

Se esse pequeno artigo te serviu para alguma coisa ou se algo não funcionou como esperado, comenta aqui.

Top comments (0)