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
相关产品推荐
相关产品推荐

