写了一个存储过程用于自动发邮件,运行时报:ORA-24247 网络访问被访问控制列表 (ACL) 拒绝
上网收集了一些资料,原来是Oracle 11g加入了一个访问控制列表(ACL)用来控制网络访问,在访问外部网络地址前需要进行配置。
弄了个脚本添加了一个访问邮箱服务器的权限
set linesize 8000
set serveroutput on
set sqlblanklines on
exec DBMS_NETWORK_ACL_ADMIN.create_acl (
acl => ‘acl_e900_email_server.xml‘,
description => ‘User JDE send Email by 11.0.0.1‘,
principal => ‘HAHAHA‘,
is_grant => TRUE,
privilege => ‘connect‘,
start_date => SYSTIMESTAMP ,
end_date => NULL);
COMMIT;
exec DBMS_NETWORK_ACL_ADMIN.assign_acl (
acl => ‘acl_e900_email_server.xml‘,
host => ‘11.0.0.1‘,
lower_port => 25,
upper_port => NULL);
COMMIT;
以下是一份完整比较详尽的配置脚本:
————————————
— 创建ACL:
————————————
BEGIN
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
ACL => ‘/sys/acls/BRDG_BMS_TO_OA.xml‘, –命名
DESCRIPTION=> ‘ACL list‘, –描述
PRINCIPAL => ‘CHD_ACT_FOR_BUG_PROJ‘, –要赋权限的用户
IS_GRANT => TRUE, –true表示赋权,false表示取消赋权
PRIVILEGE => ‘connect‘
);
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
ACL => ‘/sys/acls/BRDG_BMS_TO_OA.xml‘,
PRINCIPAL => ‘CHD_ACT_FOR_BUG_PROJ‘,
IS_GRANT => TRUE,
PRIVILEGE => ‘resolve‘
);
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
ACL => ‘/sys/acls/BRDG_BMS_TO_OA.xml‘,
HOST =>‘*‘, –主机名,可以指定主机名,也可以使用*做为通配
lower_port=> 1, –端口配置视情况而定,若需要精确控制可限定主机端口范围
upper_port=> 9999
);
commit;
END;
————————————
— 删除ACL:(与assign相对应)
————————————
— 删除acl这个列表文件,使用它的用户也就取消了对应的权限
begin
dbms_network_acl_admin.drop_acl(
‘/sys/acls/BRDG_BMS_TO_OA.xml‘
);
commit;
end;