如何让域组用户使用SVRCONN通道?CHLAUTH规则失效排查
首先,从错误信息里能明确揪出问题根源:
AMQ9777E: Channel was blocked
EXPLANATION: The inbound channel 'C.MQTEST.USR' was blocked from address 'MQTEST (40.1.62.159)' because the active values of the channel matched a record configured with USERSRC(NOACCESS). The active values of the channel were 'CLNTUSER(c275607)'
你的客户端实际用户是c275607,但你配置的CHLAUTH规则指定CLNTUSER(MQ_Support@am)(这是域组),还误用了TYPE(USERMAP)——USERMAP类型是匹配单个客户端用户的,根本不支持匹配用户组,所以这条规则完全没触发,反而让你的请求匹配到了系统里某个USERSRC(NOACCESS)的规则(大概率是一个覆盖所有未匹配用户的默认规则)。
下面是具体的解决步骤:
1. 先排查导致阻止的NOACCESS规则
先执行命令找出所有带NOACCESS的CHLAUTH记录,确认哪条规则在阻止你:
dis chlauth(*) where(USERSRC eq NOACCESS)
如果发现类似CHLAUTH(*) TYPE(USERMAP) CLNTUSER(*) USERSRC(NOACCESS)的规则,这就是罪魁祸首——它会拦截所有没被更具体规则覆盖的用户。
2. 删除无效的USERMAP规则
你之前创建的USERMAP规则类型错误,先删掉它:
delete chlauth(C.MQTEST.USR)
3. 创建正确的GROUPMAP规则
要允许整个域组的用户使用通道,必须用TYPE(GROUPMAP)类型的规则,指定域组名称,同时按需映射MCAUSER:
define chlauth(C.MQTEST.USR) TYPE(GROUPMAP) CLNTGROUP('MQ_Support@am') USERSRC(MAP) MCAUSER('mq_pocmq9w02@am') CHCKCLNT(ASQMGR) ADDRESS(40.1.62.159)
TYPE(GROUPMAP):表示规则匹配客户端所属的用户组CLNTGROUP('MQ_Support@am'):指定你要允许的域组(注意格式要和MQ识别的一致,带域名后缀)- 如果希望客户端用自身身份连接,可把
USERSRC(MAP)改成USERSRC(CHANNEL),但要确保该域组用户拥有队列管理器的+CONNECT权限。
4. 确认规则优先级
MQ的CHLAUTH规则按匹配精度排序,越具体的规则优先级越高(比如指定了CLNTGROUP和ADDRESS的规则,优先级远高于CLNTUSER(*)的通用规则)。你可以用以下命令查看规则优先级顺序:
dis chlauth(*) sort(PRIORITY)
确保你创建的GROUPMAP规则排在NOACCESS规则前面。
5. 处理MFT的凭据问题
MFT命令提示没有指定凭据文件,你需要二选一:
- 创建包含域用户
c275607密码的凭据文件:fteCreateCredentials -p DLYMQMGR -u c275607 -w <你的密码> - (不推荐生产环境)调整队列管理器配置,允许该用户无需密码连接。
6. 验证目标用户权限
最后,确保mq_pocmq9w02@am(或客户端自身用户)拥有队列管理器的必要权限:
setmqaut -m DLYMQMGR -t qmgr -p mq_pocmq9w02@am +connect +inq
完成以上步骤后,重新执行MFT传输命令,应该就能正常连接了。
内容的提问来源于stack exchange,提问作者Aman

