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

使用SSH隧道连接远程Oracle 18c,SQL Developer调试遇ACL及连接错误

解决SSH隧道连接Oracle数据库时调试存储过程的ACL与连接问题

问题场景

  • 环境:Windows 11 + Oracle SQL Developer 23.1.0.097,通过SSH隧道连接Linux服务器上的Oracle Database 18c XE(18.0.0.0.0)
  • 现象:正常执行存储过程无异常,但调试时先触发ACL权限错误:
Connecting to the database #####.
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '127.0.0.1', '11183' )
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at "SYS.DBMS_DEBUG_JDWP", line 68
ORA-06512: at line 1
Process exited.
Disconnecting from the database ####.
  • 执行以下ACL授权语句后,调试又出现连接错误:
BEGIN
  DBMS_NETWORK_ACL_ADMIN.append_host_ace(
    host        => '*',
    lower_port  => 5001,
    upper_port  => 65535,
    ace         => xs$ace_type(privilege_list => xs$name_list('JDWP'), 
                               principal_name => 'MY-USER', /* 替换为实际用户 */
                               principal_type => xs_acl.ptype_db));
END;
Executing PL/SQL: CALL DBMS_DEBUG_JDWP.CONNECT_TCP( '127.0.0.1', '14573' )
ORA-30683: failure establishing connection to debugger
ORA-12541: TNS:no listener
ORA-06512: at "SYS.DBMS_DEBUG_JDWP", line 68
ORA-06512: at line 1
Process exited.

解决步骤

1. 理清问题根源

用SSH隧道连接时,SQL Developer调试调用DBMS_DEBUG_JDWP.CONNECT_TCP('127.0.0.1', 端口),这里的127.0.0.1指的是远程Linux服务器的本地回环,而非你的Windows机器的回环。Oracle数据库试图连接自己的对应端口,但调试监听是在你本地Windows上,自然会连接失败。

2. 调整SQL Developer调试设置

打开SQL Developer,按以下步骤操作:

  • 顶部点击 工具 → 首选项 → 数据库 → 调试器
  • 将 调试器监听地址 修改为 0.0.0.0(允许所有地址连接)
  • 务必勾选 调试器使用SSH隧道 选项(这是关键,让SQL Developer自动把远程的调试请求通过SSH隧道转发回你本地)
  • 点击 确定 保存设置,然后重启SQL Developer

3. 确认ACL授权生效

先检查之前的授权是否真的生效,执行以下SQL:

-- 查看当前用户的ACL权限
SELECT host, lower_port, upper_port, principal_name, privilege
FROM dba_network_acls
JOIN dba_network_acl_aces ON dba_network_acls.acl = dba_network_acl_aces.acl
WHERE principal_name = 'MY-USER';

如果权限范围不足,重新执行授权语句(覆盖所有主机和端口):

BEGIN
  DBMS_NETWORK_ACL_ADMIN.append_host_ace(
    host        => '0.0.0.0/0',
    lower_port  => 1,
    upper_port  => 65535,
    ace         => xs$ace_type(privilege_list => xs$name_list('JDWP'), 
                               principal_name => 'MY-USER',
                               principal_type => xs_acl.ptype_db));
END;
/

4. 检查SSH隧道的转发权限

创建SSH隧道时,要确保勾选了 允许本地端口转发 和 允许远程端口转发,否则远程Oracle无法主动将调试请求发回你本地。

5. 测试调试连接

重新建立数据库连接,再次尝试调试存储过程:

  • SQL Developer会自动在SSH隧道中添加临时端口转发,将远程的调试请求转到你本地的调试器
  • 如果仍报错,检查Windows防火墙是否拦截了SQL Developer的调试端口(默认是随机端口,你可以在调试器设置中指定一个固定端口,然后在防火墙里放行该端口)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:15:13