Oracle11g Http请求报错 ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝 ORA-29273:HTTP 请求失败

项目要求每个星期执行一次C#后台代码,写了一个http请求的存储过程以便每个星期固定时间访问一次后台代码, 用call SP_XXX();执行存储过程,报出如下异常

ORA-29273: HTTP 请求失败
ORA-06512: 在 "SYS.UTL_HTTP", line 1130
ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
ORA-06512: 在 "YGMM.P_SENDSMS_TEST", line 15
ORA-06512: 在 line 3

原因:Oracle 11g引入了细粒度访问网络服务.通过在XML DB 数据库中使用访问控制列表(ACL)来实现,允许控制哪个用户能够访问哪个网络资源。

解决办法:

1、给当前Oracle登入用户配置ACL 权限

begin
   dbms_network_acl_admin.create_acl (       -- 创建访问控制文件(ACL)
     acl         => 'utl_http.xml' ,          -- 文件名称
     description => 'HTTP Access' ,           -- 描述
     principal   => 'ITS' ,                   -- 授权或者取消授权账号,大小写敏感(用大写可以,小写报错)
     is_grant    => TRUE ,                    -- 授权还是取消授权
     privilege   => 'connect' ,               -- 授权或者取消授权的权限列表
     start_date  => null ,                    -- 起始日期 最好写上起始日期,没写权限一会就失效
     end_date    => null                     -- 结束日期 最好写上起始日期,没写权限一会就失效
   );
 
   dbms_network_acl_admin.add_privilege (    -- 添加访问权限列表项
     acl        => 'utl_http.xml' ,           -- 刚才创建的acl名称
     principal  => 'ITS' ,                    -- 授权或取消授权用户
     is_grant   => TRUE ,                     -- 与上同
     privilege  => 'resolve' ,                -- 权限列表
     start_date => null ,                    
     end_date   => null
   );
 
   dbms_network_acl_admin.assign_acl (       -- 该段命令意思是允许访问acl名为utl_http.xml下授权的用户,使用oracle网络访问包,所允许访问的目的主机,及其端口范围。
     acl        => 'utl_http.xml' ,
     host       => '100.1.2.1' ,              -- ip地址或者域名,填写http://localhost:9000/hellohttp://localhost:9000/是会报host无效的
                                             -- 且建议使用ip地址或者使用域名,若用localhost,当oracle不是安装在本机上的情况下,会出现问题
     lower_port => 9000,                     -- 允许访问的起始端口号
     upper_port => Null                      -- 允许访问的截止端口号
   );
   commit ;
end ;

如需其他删除权限等操作,可以访问如下网址
http://www.2cto.com/database/201404/290719.html。

最后再执行存储过程,发现可以访问到后台代码了。



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值