MQ安全性 - 在一个队列上出现2035错误

4
我有一个应用程序,试图将消息放入远程队列管理器上的队列(LOG.TRANSACTION.IN)。但是该消息最终失败并被放置在本地队列管理器上的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个回答

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调用以及使用的选项。
然后在WMQ Explorer中安装SupportPac MS0P。这将把二进制PCF事件消息格式化为人类可读的形式,从而很容易确定问题所在。
在这种情况下,可能是因为a) MCAUSER缺少对QMgr的+setall权限或b) 它是v7且MCAUSER缺少上述S.C.SQ的适当权限。

我正在安装最新版本的MQ Explorer,并会关注一下安全性。奇怪的是,我们在所有地方都使用相同的权限,使用 MQMMCA 组,并使用来自你们网站的权限。这是我们环境中唯一的实例,在此队列管理器将被投放到远程队列,该队列既没有集群化也没有本地定义 qr。 - Matt
我非常好奇当您查看事件消息时会发现什么。远程QMgr上的WMQ版本和修补程序是什么? - T.Rob
我们正在进行一个活跃的项目,计划升级到v7。这是一个庞大的过程! - Matt
抱歉,编辑时间已过:打开选项:[out passid]用户标识符:通用ID(无法访问远程qmgr),应用程序类型:UNIX,应用程序名称:DataFlowEngine64。因此,这清楚地解释了为什么会出现未经授权的情况。我想我有一个问题,为什么它在通过设置了mcauser的通道时仍在使用此ID?通道上未启用上下文安全性,因此我希望所有消息都将使用该mcauser进行授权。 - Matt
所以,上面列出的那些消息是在远程 qmgr 上。我只能够从本地 qmgr 中获取到也接收到发送到 DLQ 的消息,并看到以下内容: 原因限定符:打开未授权,队列名称:LOG.TRANSACTION.IN,打开选项:out passid,用户标识符:MY_MCAUSER,应用类型:Unix,应用程序名称:amqrmppa,对象队列管理器名称:QMREMOTE。 - Matt
显示剩余6条评论

0

您也可以通过设置mcauser('mqm')来解决此问题。我能够克服2035错误。

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

特别感谢我的 Bilal Ahmad (PSE)


0

我画了一张小图片,希望这能让事情更加清晰明了。

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


嗨Matt,在图片中,顶部框显示了一个名为amqrmppa的进程名称,ID MQMCA是我认为在CLUSRCVR的MCAUSER中的那个。由于amqrmppa是运行入站通道的进程,这一切都指向回复消息的授权问题,而不是请求。 (假设流程从上到下请求,然后从下到上回复。) - T.Rob
在底部的框中,DataFlowEngine64的进程ID表明它是经纪人在打开输出队列时遇到问题。我猜测经纪人将输出重新排队到DLQ,因为通常本地应用程序不会自动重新排队输出消息。总之,我认为从上到下的消息流正在工作,似乎是回复流出了问题。 - T.Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接