AMQ9776:频道被封锁

AMQ9776: Channel was blocked

我需要帮助,我遇到了以下问题:

AMQ9776: Channel was blocked by userid 

EXPLANATION: 
The inbound channel 'TEST1.SRVCONN' was blocked from address '10.0.2.4' 
because the active values of the channel were mapped to a userid which should 
be blocked. The active values of the channel were 'MCAUSER(mqm) CLNTUSER(mqm)'.

我有以下权限记录:

DISPLAY CHLAUTH(*)
    37 : DISPLAY CHLAUTH(*)
AMQ8878: Ver detalles de registro de autenticación de canal.
   CHLAUTH(SYSTEM.ADMIN.SVRCONN)           TYPE(ADDRESSMAP)
   ADDRESS(*)                              USERSRC(CHANNEL)

AMQ8878: Ver detalles de registro de autenticación de canal.
   CHLAUTH(TEST1.SRVCNN)                   TYPE(ADDRESSMAP)
   ADDRESS(10.0.2.4)                       USERSRC(CHANNEL)

AMQ8878: Ver detalles de registro de autenticación de canal.
   CHLAUTH(TEST1.SRVCNN)                   TYPE(BLOCKUSER)
   USERLIST(mqm)                        

AMQ8878: Ver detalles de registro de autenticación de canal.
   CHLAUTH(SYSTEM.*)                       TYPE(ADDRESSMAP)
   ADDRESS(*)                              USERSRC(NOACCESS)

AMQ8878: Ver detalles de registro de autenticación de canal.
   CHLAUTH(*)                              TYPE(BLOCKUSER)
   USERLIST(*MQADMIN)     

所以我不知道我还能做什么,我一直在阅读有关这个​​问题的信息,我创建了连接到频道的规则,并向用户授予了权限。 ¿我错过了什么?

请注意,对于 MQ v8 及更高版本,当 MQ 将 MQ 客户端用户与 TYPE(BLOCKUSER) 规则的 USERLISTTYPE(USERMAP) 规则的 CLNTUSER 进行比较时,它可以设置为查看客户端进程在 运行 下的用户,或者查看在 MQCSP 中显示并由 CONNAUTH 成功验证的用户。要获得以后的行为,您必须在 qm.iniChannels: 节中设置 ChlauthEarlyAdopt=y。对于在 MQ v8.0 LTS 和 MQ v9.0 LTS 下创建的新队列管理器,默认情况下不会设置此项,MQ 将查看客户端进程在 运行 下的用户。对于 MQ v9.0.5 CD、MQ v9.1 LTS 和 MQ v9.1 CD,默认设置为已设置,MQ 将查看在 MQCSP 中发送并由 CONNAUTH 成功验证的用户。

请注意 ChlauthEarlyAdopt 设置是在 8.0.0.5 中添加的,在此之前它总是会查看客户端进程在 运行 下的用户。


默认情况下,MQ 带有以下规则:

CHLAUTH(*)                              TYPE(BLOCKUSER)
USERLIST(*MQADMIN)     

该规则阻止 MQ 认为具有 MQ 管理权限的所有用户连接到队列管理器上的任何 SVRCONN 通道。


您添加了以下两条规则(请注意,除非您将 ALL 添加到您的 DISPLAY 命令,否则它不会显示所有属性,所以我只能讨论您显示的内容):

AMQ8878: Ver detalles de registro de autenticación de canal.
   CHLAUTH(TEST1.SRVCNN)                   TYPE(ADDRESSMAP)
   ADDRESS(10.0.2.4)                       USERSRC(CHANNEL)

AMQ8878: Ver detalles de registro de autenticación de canal.
   CHLAUTH(TEST1.SRVCNN)                   TYPE(BLOCKUSER)
   USERLIST(mqm)         

第一个 (TYPE(ADDRESSMAP)) 将允许从 ADDRESS(10.0.2.4) 连接到此频道,并让用户设置为在频道上协商的内容。但是没有任何其他通过设置 USERSRC(NOACCESS) 来阻止连接的 MAP 规则,这个规则实际上没有做任何事情。

如果您的 SVRCONN 通道有一个空白 MCAUSER,那么 MQ 将接受从客户端发送的用户名。对于大多数客户端,这是进程在 运行 下的用户,对于 Java 和 JMS,很容易发送任何包含空白值的用户。如果客户端发送的用户和通道上的 MCAUSER 都是空白,那么协商的 MCAUSER 将是消息通道代理进程在 运行 下的用户,在 unix 上这通常是 mqm.


第二条规则(TYPE(BLOCKUSER))实际上是专门告诉 MQ 阻止用户 mqm 从客户端发送的任何通道,这可能与您尝试的相反完成。


如果连接的客户端不是管理应用程序,那么解决此问题的最佳方法是定义另一个用户并授予该用户所需的权限。

有关如何向低权限用户提供 MQ 权限的更多详细信息,请参阅我对以下问题的回答:

允许应用程序连接到没有安全性的 SVRCONN 通道不是一个好的做法,如果您使用 CONNAUTHTLS 证书来提供安全性,请不要提及频道,但如果你不是,你应该使用其中之一来锁定谁可以连接到频道。