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

Node.js连接IBM MQ身份认证异常问题咨询

IBM MQ Node.js客户端连接权限问题解决方案

问题描述

  • 环境:IBM MQ 9.2.0.11,Red Hat Enterprise Linux 8.4
  • 现象:Node.js客户端脚本中指定了用户名mqguest和密码,但连接时实际使用运行脚本的Linux本地用户(仅存在于客户端本地,服务器端无此用户),导致连接失败:
    • 客户端报错:CONNX: MQCC = MQCC_FAILED [2] MQRC = MQRC_CONNECTION_BROKEN[2009]
    • MQ服务器错误日志:Authorization failed because the SID for entity 'user' cannot be obtained
  • 例外情况:使用服务器端存在且具备MQ访问权限的用户运行脚本时,连接正常。

解决方案

1. 修改Node.js客户端脚本,强制发送指定的用户名密码

在创建cno对象后,添加强制身份验证的选项,确保客户端将指定的用户名密码发送给MQ服务器:

var cno = new mq.MQCNO();

// 原有设置用户名密码的代码
var csp = new mq.MQCSP();
csp.UserId = "mqguest";
csp.Password = "passw0rd";
cno.SecurityParms = csp;

// 添加这一行,*强制使用指定的用户名密码进行身份验证*
cno.Options |= MQC.MQCNO_AUTH_USER_ID_AND_PWD;

2. 配置MQ服务器端的身份验证与权限

2.1 配置通道用户映射规则

使用MQSC命令配置通道的身份验证规则(以SYSTEM.DEF.SVRCONN为例):

# 进入MQSC命令行
runmqsc QM1

# 创建用户映射规则,允许客户端用户mqguest映射到服务器端的mqguest用户
SET CHLAUTH('SYSTEM.DEF.SVRCONN') TYPE(USERMAP) CLNTUSER('mqguest') USERSRC(MAP) MCAUSER('mqguest')

2.2 赋予mqguest用户连接权限

确保服务器端存在mqguest用户,并赋予其连接队列管理器的权限:

# 创建mqguest用户(若不存在)
useradd mqguest
passwd mqguest

# 进入MQSC命令行
runmqsc QM1

# 授予连接队列管理器的权限
SET AUTHREC PROFILE('QM1') OBJTYPE(QMGR) PRINCIPAL('mqguest') AUTHADD(CONNECT)

2.3 验证CONNAUTH配置有效性

检查队列管理器的CONNAUTH配置,确保其指向有效的身份验证信息块(以操作系统身份验证为例):

runmqsc QM1

# 查看当前CONNAUTH配置
DISPLAY QMGR CONNAUTH

# 若未配置,创建操作系统身份验证的AUTHINFO对象并关联到队列管理器
DEFINE AUTHINFO('OS_AUTH') AUTHTYPE(OS) ADOPTCTX(YES)
ALTER QMGR CONNAUTH('OS_AUTH')

3. 生效配置并验证

  • 刷新安全配置:REFRESH SECURITY TYPE(CONNAUTH)
  • 重新运行Node.js脚本,检查是否能正常连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:41