ORA-2424 错误处理及DBMS_NETWORK_ACL_ADMIN用法汇总

ACL授权:
BEGIN
 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
  acl => 'BANK_RZ_ACL.xml',--(此处名称可随意,但需要上下保持一致)
  description => 'Enables network permissions for the image server',
  principal => 'RZHFM',  --此处用户名必须大写(当前本地数据库用户)
  is_grant => TRUE,
  privilege => 'connect');
END;
/
BEGIN
DBMS_NETWORK_ACL_ADMIN.assign_acl (
    acl => 'BANK_RZ_ACL.xml',
    host => '
10.1.22.28', --本地SMTP服务器地址
    lower_port => '7000',--(本地端口,一般8080)
    upper_port => '9000');--(本地端口,一般8080)
  COMMIT;
END;

查看ACL是否存在:
Select * From  dba_network_acls;

ORA-2424 错误处理及DBMS_NETWORK_ACL_ADMIN用法汇总

通过oracle的存储过程发邮件,出现问题,具体过程如下:
发邮件的存储过程PROC_SENDMAIL_SIMPLE在A用户,而B用户要调用A用的PROC_SENDMAIL_SIMPLE来发邮件。
其中,A用户已经把PROC_SENDMAIL_SIMPLE的执行权限给了B用户
grant execute on PROC_SENDMAIL_SIMPLE to B;

但是在B用户的存储过程中调用PROC_SENDMAIL_SIMPLE依然报错
ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝
ORA-24247: network access denied by access control list (ACL)

发生这个错误是因为网络访问控制列表管理着用户访问网络的权限。

========
解决办法:
========
拥有DBA权限的用户执行下面的SQL,分3部分

BEGIN
--1.创建访问控制列表sendmail.xml,sendmail.xml控制列表拥有connect权限,并把这个权限给了B用户,
DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(
acl=> 'sendmail.xml', -- ACL的名字,自己定义
description => 'sendmail ACL', -- ACL的描述
principal => 'B', -- 这里是用户名,大写,表示把这个ACL的权限赋给B用户
is_grant => true, --true:授权 ;false:禁止
privilege => 'connect'); --授予或者禁止的网络权限

--2.为sendmail.xml控制列表添加resolve权限,且赋给B用户
DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE(
acl=> 'sendmail.xml',
principal => 'B',
is_grant => true,
privilege => 'resolve');

--3.为控制列表ACL sendmail.xml分配可以connect和resolve的host
DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL(
acl => 'sendmail.xml',
host => 'smtp.163.com'); --smtp.163.com是邮箱服务器主机名
END;
/
COMMIT;


再次在用户B调用A的PROC_SENDMAIL_SIMPLE发邮件过程,成功发送邮件。


(笔者原创文章,转载请注明出处:https://blog.csdn.net/LFCuiYs)谢谢!

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值