ibm-mq – MQ安全性 – 在一个队列中获得2035

我有一个应用程序试图将消息放入远程队列管理器上的队列(LOG.TRANSACTION.IN).消息最终以2035失败并被置于本地队列管理器上的DLQ上.在本地队列管理器(QMLOCAL)上,应用程序将消息直接放在SCTQ上,因为没有远程队列定义.应用程序在具有MQ完全访问权限的ID下运行.我知道这不太理想,但这是另一个讨论.我们在远程端(QMREMOTE)上的clusrcvr通道上有一个mcauser,它已被授予访问本地队列的权限.我以为我已经解决了安全问题,但事实并非如此.这是安全信息

QMLOCAL:

Entity application_id has the following authorizations for object SYSTEM.CLUSTER.TRANSMIT.QUEUE:  
            get  
            browse  
            put  
            inq  
            set  
            crt  
            dlt  
            chg  
            dsp  
            passid  
            passall  
            setid  
            setall  
            clr  

QMREMOTE:

Entity MY_MCAUSER has the following authorizations for object LOG.TRANSACTION.IN:  
        put  
        crt  
        setall  

任何有关这方面的帮助将不胜感激.

最佳答案 这里有一些可能性.由于消息最终在DLQ中,因此我们知道问题出在远程端.如果您的推送应用程序生成了2035,则永远不会放置该消息.

这意味着CLUSRCVR通道中的MCAUSER就是问题所在.为了使它工作,它需要具有以下(假设MY_MCAUSER在组mqmmca中):

setmqaut -m QMREMOTE -g mqmmca -t qmgr -all connect inq setall
setmqaut -m QMREMOTE -g mqmmca -n’LOG.TRANSACTION.IN’-t queue -all put setall

与你的2035无关,频道也需要
setmqaut -m QMREMOTE -g mqmmca -n’SYSTEM.CLUSTER.COMMAND.QUEUE’-t queue -all put setall
只是为了在集群中运行.根据您的版本,MCAUSER频道可能还需要访问SYSTEM.CHANNEL.SYNCQ(v7变体).

一个简单的方法是确保启用授权事件.
ALTER QMGR AUTHOREV(ENABLED)

授权事件会告诉您失败的ID,失败的对象(QMgr,队列等),正在进行的API调用以及使用的选项.

然后将SupportPac MS0P安装到WMQ Explorer中.这会将二进制PCF事件消息格式化为人类可读的形式,这将是非常明显的问题究竟是什么.

在这种情况下,很可能a)MCAUSER缺少QMgr上的setall或b)它是v7而MCAUSER缺乏对S.C.SQ的适当许可,如上所述.

点赞