记一次ORA-24247错误

在oracle11gR2里发送邮件的时候报错:

ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
ORA-06512: 在 "SYS.PROCSENDEMAIL", line 730
ORA-06512: 在 "SC.ISC_UTIL", line 452
ORA-06512: 在 line 1

这是因为Oracle 数据库 11g有一个新的解决方案:您可以将执行权限程序包授予任何人,但要控制他们可以调用的资源。例如,utl_tcp 可限制为仅调用几个 IP地址,这种机制称为访问控制列表 (ACL)。如果主机在 ACL 中,用户可以在 utl_tcp 中使用;但是仅仅拥有对 utl_tcp的执行权限是不够的。因此,恶意进程不可能取代 utl_tcp 程序包和建立非法连接。

[@more@]

解决步骤:

1、创建一个 ACL:

begin
dbms_network_acl_admin.create_acl (
acl => 'NEWACL.xml',
description => 'news',
principal => 'CONNECT',
is_grant => TRUE,
privilege => 'connect',
start_date => null,
end_date => null
);
end;

2、为该 ACL 增加一个权限

begin
dbms_network_acl_admin.add_privilege (
acl => 'NEWACL.xml',
principal => 'SC',
is_grant => TRUE,
privilege => 'connect',
start_date => null,
end_date => null);
end;

3、添加主机:

begin
dbms_network_acl_admin.assign_acl (
acl => 'NEWACL.xml',
host => '*',
lower_port => 1,
upper_port => 1000);
end;

4、问题解决

请使用浏览器的分享功能分享到微信等