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

时间:2010-10-14 13:22:02

标签: ibm-mq

我有一个应用程序试图将消息放入远程队列管理器上的队列(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  

对此的任何帮助将不胜感激。

3 个答案:

答案 0 :(得分:2)

这里有一些可能性。由于消息最终在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的适当许可,如上所述。

答案 1 :(得分:0)

我拍了一张照片。希望这会让它更清晰。

http://imgur.com/92NJm.jpg

答案 2 :(得分:0)

你也可以解决这个问题通过设置mcauser('mqm')..我能够克服2035错误。

Define channel (channel1) chltype (svrconn) trptype (tcp) mcauser(‘mqm’)

Esp thanx到我的Bilal Ahmad(PSE)