I build a Flask Python REST app on a Oracle Cloud compute instance. The REST Call works from my client just fine. (I added Ingress Rule for 0.0.0.0/0).
My plan is to have the Comupute Instance only accesible from my ATP Database and call the REST Service from PL/SQL. When I try to call the Webservice, I get the following error:
DECLARE
l_clob CLOB;
BEGIN
l_clob := apex_web_service.make_rest_request(
p_url => 'https://130.zz.yy.xx:5000/test',
--p_url=> 'https://httpbin.org/get',
p_http_method => 'GET'
);
END;
Error report -
ORA-29273: HTTP request failed
ORA-06512: at "APEX_220100.WWV_FLOW_WEB_SERVICES", line 1182
ORA-06512: at "APEX_220100.WWV_FLOW_WEB_SERVICES", line 782
ORA-01031: insufficient privileges
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1209
ORA-06512: at "APEX_220100.WWV_FLOW_WEB_SERVICES", line 756
ORA-06512: at "APEX_220100.WWV_FLOW_WEB_SERVICES", line 1023
ORA-06512: at "APEX_220100.WWV_FLOW_WEB_SERVICES", line 1371
ORA-06512: at "APEX_220100.WWV_FLOW_WEBSERVICES_API", line 568
ORA-06512: at line 5
29273. 00000 - "HTTP request failed"
*Cause: The UTL_HTTP package failed to execute the HTTP request.
*Action: Use get_detailed_sqlerrm to check the detailed error message.
Fix the error and retry the HTTP request.
Normal REST Calls work just fine. What could be the problem?
The ATP can not access the compute instance because of some network settings?
ATP is not happy with the SSL settings or some other nasty HTTPS stuff?
The restrictions of calling REST APIs from APEX on autonomous database are outlined here:
https://docs.oracle.com/en/cloud/paas/atp-cloud/atpgs/autonomous-apex-web-services.html
So ...
must be a public endpoint, and the SSL certificate must be provided by a public CA.
For HTTPS, only the default port (443) is allowed; other ports raise the error message you're seeing.
configuring a proxy server in APEX is not supported on ADB; you then also
get the "Insufficient Privileges" error.
Related
When I execute the following statement that involves a UTL_HTTP.REQUEST call, I get ORA-29024: Certificate validation failure:
SELECT UTL_HTTP.REQUEST('https://www.google.com') from DUAL;
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1620
ORA-29024: Certificate validation failure
ORA-06512: at "SYS.UTL_HTTP", line 380
ORA-06512: at "SYS.UTL_HTTP", line 1560
ORA-06512: at line 1
According to the Autonomous Database doc, UTL_HTTP is among the supported PL/SQL packages. Why is this query not working?
This error is a result of not completing the prerequisite steps for UTL_HTTP in Autonomous Database. As mentioned in the example from the doc, before calling the UTL_HTTP.REQUEST() procedure, we need to first create an Access Control List (ACL) for the host via the DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE() and set the wallet location via UTL_HTTP.SET_WALLET():
-- Create an Access Control List for the host
BEGIN
DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE(
host => 'www.google.com',
ace => xs$ace_type(privilege_list => xs$name_list('http'),
principal_name => 'ADMIN',
principal_type => xs_acl.ptype_db));
END;
/
PL/SQL procedure successfully completed.
-- Set Oracle Wallet location (no arguments needed)
BEGIN
UTL_HTTP.SET_WALLET('');
END;
/
PL/SQL procedure successfully completed.
SELECT UTL_HTTP.REQUEST('https://www.google.com') from DUAL;
utl_http.request('https://www.google.com')
-------------------------------------------------------------------------------------
<!doctype html><html itemscope="" itemtype="http://schema.org/WebPage" lang="en"> ...
Disclaimer: I’m a Product Manager at Oracle.
When I am running this, i am getting error:
begin
UTL_MAIL.SEND(SENDER =>'admin#dbaclass.com',
RECIPIENTS=> 'support#dbaclass.com',
SUBJECT=> 'MAIL FROM dbaclasss SENDER',
MESSAGE => 'Welcome to dbaclass'
);
end;
Error:
Error report -
ORA-29278: SMTP transient error: 421 Service not available
ORA-06512: at "SYS.UTL_MAIL", line 654
ORA-06512: at "SYS.UTL_MAIL", line 671
ORA-06512: at line 2
29278. 00000 - "SMTP transient error: %s"
I checked the telnet command to check the stmp.gmail.com its working fine.
but when i tried this from oracle it is giving the above error.
Can someone please help me.
That will not work out of the box.
If your server is not ssl/tls you need at least set (maybe create local smtp first for test) and set acl:
ALTER SYSTEM SET smtp_out_server = 'mailserver.domain.com'
If server is secure (and gmail is) and you have no local smtp server to work with. You need to do more to set secure connection.
Look at this to get idea for start(you need walled or own secure ssl/tls implementation):
Give credentials to UTL_MAIL.SEND to bypass ORA-29278
Probably at this too:
http://oracle.ninja/sending-secure-e-mails-out-of-the-database-ssltls-utl_smtp-openssl-acl-wallet/
I'm trying to send email using oracle 11g as below.
begin
utl_mail.send(
sender => 'user#xxx.com',
recipients => 'user#gmail.com',
message => 'Hello World'
);
but i got below error.
ORA-29279: SMTP permanent error: 530 5.5.1 http://support.google.com/mail/bin/answer.py?answer=14257 ph1sm17301835pbb.45
ORA-06512: at "SYS.UTL_MAIL", line 654
ORA-06512: at "SYS.UTL_MAIL", line 671
ORA-06512: at line 2
29279. 00000 - "SMTP permanent error: %s"
*Cause: A SMTP permanent error occurred.
*Action: Correct the error and retry the SMTP operation.
how could i solve this ?
According to the GMail documentation, you need SMTP/Auth to send E-Mails via GMail.
Unfortunately, utl_mail doesn't support this - you'll have to use utl_smtp.
See Oracle Forums for an example.
In Oracle 11g ,the database has an Fine-Grained network access control list, so when i use pl/sql to upload a file to the ftp_server,it gives me a network access error.
The error information like this:
error at 1 line:
ORA-29260: network error:not connected
ORA-06512: at "SYS.UTL_TCP", line 212
ORA-06512: at "SYS.UTL_TCP", line 432
ORA-06512: at "SCOTT.FTP", line 413
ORA-24247: Network access rejected by acl
ORA-06512: at "SCOTT.FTP", line 491
ORA-06512: at line 6
I want to know how can i do about creating acl rules so that i can get the privilege.
Thanks
Here's a tutorial about ACL in Oracle.
I want send the email from oracle database.
So I did the following steps
#F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\utlmail.sql
#F:\oracle\product\10.2.0\db_1\RDBMS\ADMIN\prvtmail.plb
alter system set smtp_out_server = 'webmail.vilsoft.co.in:25' scope=both;
exec utl_mail.send(sender=> 'Id1#vilsoft.co.in',
recipients=>'Id2#vilsoft.co.in',
subject=>'test mail',message=>'hi');
PL/SQL procedure successfully completed.
So the mail is send to Destination Correctly.
But When I want to send the mail from one server to another server So i execute the following query
SQL> exec utl_mail.send(sender=> 'ID1#vilsoft.co.in',recipients=>'Id2#gmail.com',
subject=>'test mail',message=>'hi');
then following error occurs....
BEGIN utl_mail.send(sender=> 'ID1#vilsoft.co.in',recipients=>'Id2#gmail.com',
subject=>'test mail',message=>'hi');
END;
*
ERROR at line 1:
ORA-29279: SMTP permanent error: 553 sorry, that domain isn't in my list of
allowed rcpthosts (#5.7.1)
ORA-06512: at "SYS.UTL_SMTP", line 20
ORA-06512: at "SYS.UTL_SMTP", line 98
ORA-06512: at "SYS.UTL_SMTP", line 240
ORA-06512: at "SYS.UTL_MAIL", line 424
ORA-06512: at "SYS.UTL_MAIL", line 594
ORA-06512: at line 1
So Please help me to resolve this error ...
This is not an Oracle error per se - Oracle is simply reporting back an error it received from the mail system. The error message itself (SMTP 553) can mean several things, among them that your ISP does not allow unauthenticated sending of mail outside your domain, or that your local network security policy does not allow mail to be sent from your mail server to addresses in the gmail.com domain, or that the mail server you're sending to sees your domain or address on a blacklist. Talk to your ISP to verify.