oracle 11g 发信需要赋予权限 ORA-24247: 网络访问被访问控制列表 (ACL) 拒绝

转自:http://blog.itpub.net/7177735/viewspace-1171456/

1 创建 ACL

begin

    dbms_network_acl_admin.create_acl (

    acl => 'UTL_INADDR.xml',

    description => 'utl_inaddr',

    principal => 'TEST',   --此为将来要进行操作的用户

    is_grant => TRUE,

    privilege => 'resolve'

    );

    commit;

end;

 /2 增加权限

begin

    dbms_network_acl_admin.add_privilege (

    acl => 'UTL_INADDR.xml',

    principal => 'TEST',

    is_grant => TRUE,

    privilege => 'connect'

    );

    commit;

end;

 /

3 授予用户权限

begin

    dbms_network_acl_admin.assign_acl(

    acl => 'UTL_INADDR.xml',

    host => '*'

    );

    commit;

end;

/


用ORACLE发邮件也会遇到这个问题,貌似11G新增了什么限制所致,为何建库的时候没有执行相关脚本呢,在此记录一下!

<think>好的,我现在需要帮用户解决Oracle存储过程中遇到的ORA-24247错误。这个错误提示是网络访问访问控制列表ACL拒绝,所以首先我得回忆一下OracleACL权限管理机制。 根据用户提供的引用内容,特别是引用[1]、[2]、[3]提到的问题,错误发生在使用UTL_HTTP包发送请求或者执行某些网络操作时。这说明问题可能出在数据库用户没有相应的网络访问权限Oracle 11g开始加强了安全性,必须通过ACL授权用户访问外部网络。 接下来,我需要确定解决步骤。首先,用户需要检查当前的ACL配置,可以使用引用[4]和[5]中的SQL语句查询dba_network_acls视图,看看是否有相关的ACL条目存在。如果没有,就需要创建一个新的ACL。 然后,授权必要的权限。根据引用[3]和[4]提到的解决方法,可能需要使用DBMS_NETWORK_ACL_ADMIN包来创建ACL并分配权限。例如,使用CREATE_ACL来指定访问的主机、端口,再使用ASSIGN_ACLACL分配给用户。同时,用户可能需要被授予执行UTL_HTTP等包的权限,如引用[3]提到的授权语句。 需要注意的是,如果用户使用的是Oracle 11g,语法可能与旧版本不同,比如使用ADD_PRIVILEGE过程来添加权限。另外,执行这些操作需要DBA权限,所以用户可能需要联系数据库管理员或者有足够权限的账户来操作。 最后,测试配置是否生效,可以再次执行存储过程或发送请求,确认错误是否解决。如果问题依旧,可能需要检查ACL的配置是否正确,比如主机名是否准确,端口范围是否包含实际使用的端口,以及用户是否被正确授权。 总结步骤应该是:检查现有ACL、创建ACL、分配权限授权用户使用相关包,然后测试。同时提醒用户注意权限管理的安全性,避免开放不必要的访问。</think>### ORA-24247 错误解决方案 #### 错误原因分析 ORA-24247 错误表示数据库用户尝试进行网络操作(如发送邮件、HTTP请求)时,被访问控制列表ACL)拦截。Oracle 11g 开始引入 ACL 安全机制,需显式授权用户访问外部网络资源[^1][^2]。 --- #### 解决步骤(需DBA权限) 1. **检查现有ACL配置** ```sql SELECT host, lower_port, upper_port, acl FROM dba_network_acls; ``` 若结果为空或未覆盖目标地址,需新建ACL[^4][^5]。 2. **创建ACL授权** ```sql BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL( acl => 'http_access.xml', description => 'HTTP网络访问权限', principal => 'YOUR_USER', -- 替换为实际用户名 is_grant => TRUE, privilege => 'connect' ); END; / ``` 3. **分配ACL到目标主机** ```sql BEGIN DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL( acl => 'http_access.xml', host => '目标域名或IP', -- 如 'www.example.com' 或 '*' lower_port => 80, -- HTTP默认端口 upper_port => 80 ); END; / ``` 4. **授予UTL_HTTP执行权限** ```sql GRANT EXECUTE ON UTL_HTTP TO YOUR_USER; -- 替换为实际用户名 ``` --- #### 验证配置 ```sql SELECT * FROM USER_NETWORK_ACLS; SELECT * FROM USER_NETWORK_ACL_PRIVILEGES; ``` --- #### 扩展场景 - **多端口配置**:若需访问443端口: ```sql BEGIN DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE( acl => 'http_access.xml', principal => 'YOUR_USER', is_grant => TRUE, privilege => 'connect', position => NULL ); DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL( acl => 'http_access.xml', host => '目标地址', lower_port => 443, upper_port => 443 ); END; / ``` --- #### 注意事项 1. 使用通配符`*`时需谨慎,可能引发安全隐患 2. 修改ACL后建议重启相关服务 3. 邮件发送场景需同时配置SMTP端口权限(通常25/465)
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值