oracle 24247错误,Oracle11gR2下PL/SQL访问网络的错误ORA-24247

原有系统运行在10g下面,有很多程序是使用utl_smtp, utl_http等包进行网络访问。最近升级到11gR2之后,wait4friend 遇到ORA-24247错误。错误信息如下

ORA-24247: network access denied by access control list (ACL)

这是Oracle11g的一个安全特性,所有使用网络访问的用户都需要特殊的赋权。解决办法也挺简单,只需要建立一个ACL控制,并且设置相应的权限即可。

-------------------------------------------------------------------

--drop

declare

v_acl varchar2(100):= 'fxkz_alert.xml';

begin

dbms_network_acl_admin.drop_acl (acl => v_acl);

commit;

end;

/

-------------------------------------------------------------------

-- 新建ACL并且设置地址

declare

v_user_name varchar2(30) := upper('test');

v_acl       varchar2(100) := 'fxkz_alert.xml';

v_privilege varchar2(30) := lower('connect');

begin

-- 新建acl

dbms_network_acl_admin.create_acl(acl         => v_acl,

description => '风险控制警报acl',

principal   => v_user_name,

is_grant    => true,

privilege   => v_privilege,

start_date  => null,

end_date    => null);

-- 赋予指定地址和端口的权限

-- 这里使用通配符代替如下地址和端口

-- smtp.exmail.qq.com:25

-- 221.236.20.139:8100

dbms_network_acl_admin.assign_acl(acl        => v_acl,

host       => '*',

lower_port => 1,

upper_port => 10000);

commit;

end;

/

设置之后可以通过视图检查设置的结果

-------------------------------------------------------------------

-- 检查配置情况

select r.any_path from resource_view r where r.any_path like '/sys/acls/%.xml' order by 1;

select a.host, a.lower_port, a.upper_port,a.acl, a.aclid from dba_network_acls  a where a.ACL='/sys/acls/fxkz_alert.xml';

select p.* from dba_network_acl_privileges p;

使用简单的代码也可以直接验证设置的用户权限是否生效

-----------------------------------------------------------------

-- 测试代码,必须使用被测试的用户执行

declare

v_conn utl_smtp.connection;

begin

v_conn := utl_smtp.open_connection('smtp.exmail.qq.com', 25);

end;

/

declare

v_http_url varchar2(300); --短信平台地址

v_http_req utl_http.req; --http请求对象

begin

v_http_url := 'http://221.236.20.139:8100/sendsms/sms.do';

v_http_req := utl_http.begin_request(v_http_url,

'post',

utl_http.http_version_1_1);

end;

/

如果设置之后,还需要加入其他的用户,也很简单

------------------------------------------------------------------

-- 加入额外的用户

begin

dbms_network_acl_admin.add_privilege(acl        => 'fxkz_alert.xml',

principal  => upper('bill_src'),

is_grant   => true,

privilege  => 'connect',

start_date => null,

end_date   => null);

commit;

end;

/

本文参考了下列资料

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值