Oracle Cloud中ATP调用Compute实例Flask服务报错求助
问题排查与解决方案
权限问题(优先处理)
错误栈中明确出现 ORA-01031: insufficient privileges,这是触发HTTP请求失败的核心原因之一:
- 执行PL/SQL的用户必须被授予
UTL_HTTP包的执行权限:GRANT EXECUTE ON UTL_HTTP TO 你的用户名; - 若使用APEX的
apex_web_service,还需给用户分配APEX_WEB_SERVICE_ACCESS角色,或者直接授权APEX Web服务访问权限:GRANT APEX_WEB_SERVICE_ACCESS TO 你的用户名; - 另外,ATP本身有网络访问管控,要确认该用户被允许发起出站HTTP请求。
网络连通性排查
就算计算实例开放了0.0.0.0/0的入站规则,ATP到计算实例的网络通路仍需确认:
- 若ATP和计算实例在不同VCN,必须配置VCN对等连接;同一VCN下,要检查ATP所在子网的安全组是否允许出站访问计算实例的5000端口。
- 计算实例的安全组入站规则要确认是针对TCP协议的5000端口,没有额外的网络ACL限制源IP。
- 可以先用
UTL_HTTP.REQUEST做基础连通测试,暂时跳过HTTPS排除干扰(如果Flask支持HTTP的话):DECLARE l_response VARCHAR2(4000); BEGIN l_response := UTL_HTTP.REQUEST('http://130.zz.yy.xx:5000/test'); DBMS_OUTPUT.PUT_LINE(l_response); END;
SSL/HTTPS配置问题
如果调用的是HTTPS地址,ATP需要信任Flask应用的SSL证书:
- 若Flask用的是自签名证书,ATP默认不会信任,必须把证书导入到Oracle钱包:
- 导出Flask的SSL证书文件(比如
cert.pem)。 - 在ATP中配置钱包并导入证书:
也可以直接把证书添加到ATP自带的信任钱包中。BEGIN UTL_HTTP.SET_WALLET('file:/wallet/path', 'wallet_password'); END;
- 导出Flask的SSL证书文件(比如
- 同时检查Flask的SSL配置,确保证书和密钥匹配,且支持ATP环境要求的TLS版本(至少TLS 1.2)。
内容的提问来源于stack exchange,提问作者Heinz F.
相关产品推荐
相关产品推荐

