在新建的数据库中,通过UTL_HTTP包发送请求时.抛出异常
ORA-06512: 在 "SYS.UTL_HTTP", line 368ORA-06512: 在 "SYS.UTL_HTTP", line 1118ORA-29273: HTTP 请求失败ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
原因,新创建的用户并未指定ACL权限(访问控制列表),因此不能直接访问互联网
解决方式
首先查询下,当前数据库中,是否为当前用户分配ACL权限
select * from dba_network_acl_privileges ;
可以看到,系统中,存有ACL文件,但是分配的PRINCIAPL中没有当前用户.
因此,执行以下SQL,将系统中已经有的ACL文件分配给当前用户.
begin dbms_network_acl_admin.add_privilege (acl => '/sys/acls/XXX.xml', -- 命名ACL principal => 'XXXX', -- 用户 is_grant => true, -- true表示赋权,false表示取消赋权 privilege => 'connect'); -- 权限限制end;
如果很不幸,你之前没有创建过ACL文件
则需要创建,并分配访问端口
创建文件
begin dbms_network_acl_admin.create_acl (acl => '/sys/acls/utl_http.xml', -- 命名 description => 'some word.. ', -- 描述 principal => 'XXXX', -- 要赋权限的用户 is_grant => true, -- true表示赋权,false表示取消赋权 privilege => 'connect'); -- 权限限制end;
分配地址,端口
begin dbms_network_acl_admin.unassign_acl (acl => '/sys/acls/ACLName.xml', -- 命名 host => '11.11.111.11', -- 服务器地址 lower_port => 1, -- 端口从 upper_port => 10000); -- 端口到end; 34059712