注册

nodejs驱动dmdb@1.0.52452 连接 ENABLE_ENCRYPT=4 数据库超时

(* ̄(エ) ̄) 2026/09/22 131 0

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:DM8(具体版本待补充)
【操作系统】:macOS
【CPU】:Apple M1
【问题描述】*:
Node.js 项目使用 dmdb@1.0.52452 驱动连接达梦数据库。服务端配置 ENABLE_ENCRYPT=4(仅开启 SSL 通信加密,不进行客户端认证)后,连接报错:

[20010] 网络通讯超时

TCP 端口可以正常连接,但驱动在登录阶段超时。调整超时时间、切换 loginEncrypt 均未解决。

连接配置如下(敏感信息已打码):

{ connectionString: '***.***.***.***:5236', user: '******', password: '******', schema: '******', connectTimeout: 15000, socketTimeout: 15000, loginEncrypt: false }

排查驱动源码发现,src/net/access.js 仅对 SSL 模式 1/2 调用 startTLS(),未处理模式 4;同时,startTLS(false) 原本会报不支持 SSL 认证。

目前通过以下临时补丁修复,共修改 3 行代码,仅为模式 4 增加支持,保留模式 1/2 原有逻辑:

--- a/src/driver/connection.js +++ b/src/driver/connection.js @@ - var r = e._createSecureContext(); - n ? (e.tlsSocket = tls_1.connect({ + var r = 4 === e.sslEncrypt ? tls_1.createSecureContext() : e._createSecureContext(); + n || 4 === e.sslEncrypt ? (e.tlsSocket = tls_1.connect({ --- a/src/net/access.js +++ b/src/net/access.js @@ - return r = t.sent(), 2 !== this.pt.sslEncrypt ? [ 3, 3 ] : [ 4, this.pt.startTLS(!1) ]; + return r = t.sent(), 2 !== this.pt.sslEncrypt && 4 !== this.pt.sslEncrypt ? [ 3, 3 ] : [ 4, this.pt.startTLS(!1) ];

应用补丁后,已在 ENABLE_ENCRYPT=4 环境下成功连接并执行 SELECT 1 FROM DUAL。

希望官方确认该兼容问题及补丁方案,并在后续 dmdb Node.js 驱动中原生支持 ENABLE_ENCRYPT=4;如已有受支持的连接配置,也请提供说明。

回答 0
暂无回答
扫一扫
联系客服