Oracle11g ORA-24247:ACL从PL/SQL函数中拒绝访问,但不是从SQL拒绝访问

Oracle11g ORA-24247:ACL从PL/SQL函数中拒绝访问,但不是从SQL拒绝访问,oracle11g,acl,ora-24247,Oracle11g,Acl,Ora 24247,我已成功地为我的用户和URL设置ACL。 我通过运行以下命令来确认这一点: select utl_http.request(*my URL*) from dual; 返回相应的HTMLcode 但是,当我将此代码放在PL/SQL函数中时,如下所示: create or replace function temp_func (p_url varchar2) return varchar2 is v_output varchar2(1000); begin select u

我已成功地为我的用户和
URL
设置
ACL
。 我通过运行以下命令来确认这一点:

select utl_http.request(*my URL*) 
from   dual;
返回相应的
HTML
code

但是,当我将此代码放在
PL/SQL
函数中时,如下所示:

create or replace function temp_func (p_url varchar2)
return varchar2 is
    v_output varchar2(1000);
begin
    select  utl_http.request(p_url)
    into    v_output
    from    dual;

    return v_output;
end;
并从匿名
PL/SQL
块运行此代码:

declare
    v_result varchar2(1000);
begin
    v_result := temp_func(*my URL*);
    dbms_output.put_line(v_result);
end;
我得到以下错误堆栈:

Error report -
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1722
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at line 1
ORA-06512: at "SIEF.TEMP_FUNC", line 7
ORA-06512: at line 4
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.
有没有办法解决这个问题?

我在看书 我发现最接近的是: “4.当通过PLSQL过程请求服务时,通过角色授予ACL不起作用”, 但是,我在设置ACL时没有使用角色

谢谢大家!

我的数据库版本:

我的ACL设置:


当事情在匿名块中而不是在存储过程中工作时,通常是因为定义者的权限与调用者的权限不同。匿名块和调用方权限过程可以使用通过角色授予的权限,但定义方权限过程不能


尝试将
return varchar2 is
更改为
return varchar2 authid\u当前用户是

,那么您是如何设置ACL的呢?将您执行的所有相关声明包括在问题中会很有帮助。感谢您抽出时间!乔恩·海勒的建议解决了我的问题,但我会将我的ACL设置记录在问题中。它有效!谢谢你抽出时间。我很欣赏这个建议和解释——我不知道定义者的权利和调用者的权利。
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
"CORE   11.2.0.3.0  Production"
TNS for Linux: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
-- Creating ACL
begin
    dbms_network_acl_admin.create_acl(
        acl         => 'WS_test_acl.xml',
        description => 'ACL file for testing purposes.',
        principal   => *my user*,
        is_grant    => TRUE,
        privilege   => 'connect');
end;
-- Adding URL to ACL
begin
    dbms_network_acl_admin.assign_acl(
        acl         => 'WS_test_acl.xml',
        host        => *my URL*);
end;