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;
É 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;
Se esse pequeno artigo te serviu para alguma coisa ou se algo não funcionou como esperado, comenta aqui.
Top comments (0)