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

MQ 9.3 SDR/RCVR通道AUTHINFO配置问题及权限管控咨询

IBM MQ 9.3 通道权限配置问题解答

问题场景

局域网内部署2台Linux虚拟机与1台Win10主机,已搭建双向分布式队列架构的QM-A(VM1)与QM-B(VM2),均连接Win10上的MQ Explorer,MQ版本为9.3,整体运行正常。

希望为SDR和RCVR通道添加安全层,仅允许已拥有队列管理器访问权限的特定用户查看通道消息。已尝试创建AUTHINFO对象并配置队列管理器使用该对象,但部署后未达到预期效果——非指定用户jackson执行./amqsget仍能获取测试消息。

示例配置MQSC命令如下:

DEFINE AUTHINFO('LDAP_AUTHINFO') AUTHTYPE(IDPWLDAP) USRFIELD('uid') SHORTUSR('cn') BASEDNU('ou=users, o=bob, c=ireland') CLASSUSR('inetOrgPerson') LDAPPWD('bob1234') LDAPUSER('cn=jason,ou=users,o=bob,c=ireland')
ALTER QMGR CONNAUTH('LDAP_AUTHINFO')
REFRESH SECURITY TYPE(CONNAUTH)

ALTER QMGR CHLAUTH(ENABLED)
SET CHLAUTH('SDR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('LDAP_AUTHINFO') ADDRESS('*') ACTION(ADD)
SET CHLAUTH('RCVR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('LDAP_AUTHINFO') ADDRESS('*') ACTION(ADD)
SET CHLAUTH('SDR') TYPE(BLOCKUSER) USERLIST('*') ACTION(ADD)
SET CHLAUTH('RCVR') TYPE(BLOCKUSER) USERLIST('*') ACTION(ADD)


DEFINE CHANNEL(SOMESENDER) CHLTYPE(SDR) CONNAUTH('localhost(1800)') TRPTYPE(TCP) XMITQ(ALREADYDEFINED)
START CHANNEL(SOMESENDER)

1. 如何正确配置以允许LDAP用户仅查看SDR/RCVR通道消息?

原配置存在两个核心问题:

  • USERMAP规则中MCAUSER参数错误:MCAUSER需要映射到操作系统本地用户或LDAP同步到本地的账号,而非AUTHINFO对象名;
  • BLOCKUSER('*')规则优先级导致合法用户被拦截:MQ的CHLAUTH规则按匹配精度执行,全匹配的BLOCK规则会覆盖之前的USERMAP规则。

正确配置步骤

步骤1:确保LDAP AUTHINFO配置有效

DEFINE AUTHINFO('LDAP_AUTHINFO') AUTHTYPE(IDPWLDAP) USRFIELD('uid') SHORTUSR('cn') BASEDNU('ou=users, o=bob, c=ireland') CLASSUSR('inetOrgPerson') LDAPPWD('bob1234') LDAPUSER('cn=jason,ou=users,o=bob,c=ireland')
ALTER QMGR CONNAUTH('LDAP_AUTHINFO')
REFRESH SECURITY TYPE(CONNAUTH)

步骤2:为通道启用LDAP认证

修改SDR/RCVR通道,指定使用LDAP_AUTHINFO做连接认证:

ALTER CHANNEL('SDR') CHLTYPE(SDR) CONNAUTH('LDAP_AUTHINFO')
ALTER CHANNEL('RCVR') CHLTYPE(RCVR) CONNAUTH('LDAP_AUTHINFO')

步骤3:删除原错误CHLAUTH规则

SET CHLAUTH('SDR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('LDAP_AUTHINFO') ADDRESS('*') ACTION(DELETE)
SET CHLAUTH('RCVR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('LDAP_AUTHINFO') ADDRESS('*') ACTION(DELETE)
SET CHLAUTH('SDR') TYPE(BLOCKUSER) USERLIST('*') ACTION(DELETE)
SET CHLAUTH('RCVR') TYPE(BLOCKUSER) USERLIST('*') ACTION(DELETE)

步骤4:添加精准的CHLAUTH规则

先允许指定用户jason映射到合法MCA用户(例如本地mqm账号),再阻止其他未匹配用户:

-- 允许jason通过SDR/RCVR通道,并映射到mqm用户
SET CHLAUTH('SDR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('mqm') ADDRESS('*') ACTION(ADD)
SET CHLAUTH('RCVR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('mqm') ADDRESS('*') ACTION(ADD)

-- 阻止除jason外的所有用户
SET CHLAUTH('SDR') TYPE(BLOCKUSER) USERLIST('*') EXCLUDEUSER('jason') ACTION(ADD)
SET CHLAUTH('RCVR') TYPE(BLOCKUSER) USERLIST('*') EXCLUDEUSER('jason') ACTION(ADD)

步骤5:配置队列访问权限

限制只有mqm用户(即jason映射后的账号)能浏览/获取队列消息:

-- 替换TEST.Q为实际目标队列名
SET AUTHREC PROFILE('TEST.Q') OBJTYPE(QUEUE) PRINCIPAL('mqm') AUTHADD(BROWSE,GET)
SET AUTHREC PROFILE('TEST.Q') OBJTYPE(QUEUE) PRINCIPAL('*') AUTHREMOVE(BROWSE,GET)

步骤6:刷新安全设置

REFRESH SECURITY TYPE(CONNAUTH)
REFRESH SECURITY TYPE(CHLAUTH)

2. 是否可创建基于指定用户列表的账号密码认证AUTHINFO对象?

IBM MQ 9.3不支持直接创建仅包含指定用户列表的AUTHINFO对象,但可以通过以下两种方式实现类似效果:

方式1:使用操作系统本地用户认证(IDPWOS)

创建基于操作系统用户数据库的AUTHINFO,再通过CHLAUTH规则限制允许的用户:

-- 创建操作系统用户认证的AUTHINFO
DEFINE AUTHINFO('LOCAL_AUTHINFO') AUTHTYPE(IDPWOS) ADOPTCTX(YES)
ALTER QMGR CONNAUTH('LOCAL_AUTHINFO')
REFRESH SECURITY TYPE(CONNAUTH)

-- 仅允许jason通过通道
SET CHLAUTH('SDR') TYPE(USERMAP) CLNTUSER('jason') USERSRC(MAP) MCAUSER('mqm') ADDRESS('*') ACTION(ADD)
SET CHLAUTH('SDR') TYPE(BLOCKUSER) USERLIST('*') EXCLUDEUSER('jason') ACTION(ADD)

方式2:结合SSL证书DN映射(复杂场景)

如果需要完全脱离LDAP/OS用户体系,可以为指定用户颁发SSL证书,通过通道的SSLCAUTH属性强制证书认证,再用CHLAUTH规则映射证书DN到合法MCA用户。但这种配置复杂度较高,仅推荐在特殊场景使用。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 18:32:32