Oracle 11g ACL访问控制(11g的新玩意)

时间:2021-08-23 03:04:35

写了一个存储过程用于自动发邮件,运行时报: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;