You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle调试PL/SQL函数报ORA-24247 ACL网络访问被拒绝问题求助

Oracle PL/SQL调试ACL拒绝(ORA-24247)解决方案

报错原因分析

你之前的配置未生效大概率是以下几个常见问题:

  • 执行完ACL配置语句后未提交事务,DBMS_NETWORK_ACL_ADMIN的修改属于事务性操作,未提交则规则不生效
  • 端口范围设置为null,部分Oracle版本会出现规则匹配异常,无法命中4000调试端口
  • 未排查已有ACL规则冲突:若存在优先级更高的拒绝规则,会覆盖你新增的允许规则
  • 配置的principal_name与实际调试使用的数据库用户不匹配(Oracle用户名默认大写,小写配置会无效)

正确配置步骤

  1. 执行以下授权语句,明确指定端口范围与用户,执行完成后务必提交事务:
BEGIN
 DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE
 (
 host => '127.0.0.1',
 lower_port => 4000,
 upper_port => 4000,
 ace => xs$ace_type(
     privilege_list => xs$name_list('jdwp'),
     principal_name => 'SYSTEM',
     principal_type => xs_acl.ptype_db
 )
 );
 COMMIT; -- 必须提交事务才会生效
END;
/

如果你调试用的不是SYSTEM用户,请将principal_name改为你实际使用的数据库用户名,注意必须大写。如果调试端口不是固定4000,可以调整lower_port和upper_port为你实际使用的端口范围。

  1. 若依然报错,先查询当前已配置的ACL规则,排查是否有冲突:
SELECT host, lower_port, upper_port, privilege, principal_name 
FROM dba_host_aces 
WHERE host = '127.0.0.1'
ORDER BY ace_order;
  • 若查询结果中存在privilege为jdwp、principal_name为对应用户的拒绝规则,需要先删除冲突规则后再重新添加允许规则。
  • 删除冲突规则的语句示例(替换对应参数为你实际查询到的冲突项参数):
BEGIN
 DBMS_NETWORK_ACL_ADMIN.REMOVE_HOST_ACE
 (
 host => '127.0.0.1',
 lower_port => 4000,
 upper_port => 4000,
 ace => xs$ace_type(
     privilege_list => xs$name_list('jdwp'),
     principal_name => 'SYSTEM',
     principal_type => xs_acl.ptype_db
 )
 );
 COMMIT;
END;
/

额外注意事项

  • 如果你调试时连接的数据库主机使用localhost代替127.0.0.1,需要额外新增针对localhost的ACE规则,Oracle会将二者识别为不同的主机配置。
  • 部分Oracle云环境或安全加固后的实例,会存在全局ACL限制,需要确认实例级别的网络访问策略是否允许JDWP调试连接。

内容的提问来源于stack exchange,提问作者AlbertAlex

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 17:36:03