Ibm mq WebSphereMQQ程序使用
我使用以下MQSC命令创建了队列管理器QM_测试:Ibm mq WebSphereMQQ程序使用,ibm-mq,Ibm Mq,我使用以下MQSC命令创建了队列管理器QM_测试: SET AUTHREC OBJTYPE(QMGR) GROUP('mq-user') AUTHADD(INQ,DSP,CONNECT,SET,SETALL) SET AUTHREC PROFILE(SYSTEM.MQEXPLORER.REPLY.MODEL) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(INQ,DSP,GET) SET AUTHREC PROFILE(SYSTEM.ADMIN.CO
SET AUTHREC OBJTYPE(QMGR) GROUP('mq-user') AUTHADD(INQ,DSP,CONNECT,SET,SETALL)
SET AUTHREC PROFILE(SYSTEM.MQEXPLORER.REPLY.MODEL) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(INQ,DSP,GET)
SET AUTHREC PROFILE(SYSTEM.ADMIN.COMMAND.QUEUE) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(INQ,DSP,PUT)
DEFINE CHANNEL ($cname) CHLTYPE (SVRCONN) TRPTYPE (TCP) MCAUSER('tcs-mq-user') REPLACE
SET CHLAUTH($cname) TYPE(ADDRESSMAP) ADDRESS(*) MCAUSER('tcs-mq-user')
DEFINE QLOCAL ($dlqname) REPLACE
SET AUTHREC PROFILE($dlqname) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(ALL)
ALTER QMGR DEADQ($dlqname) FORCE
DEFINE LISTENER ($lname) TRPTYPE (TCP) CONTROL (QMGR) PORT ($port)
START LISTENER ($lname)
我使用以下方法创建了两个队列TEST1和TEST2:
DEFINE QLOCAL ($qname) GET(ENABLED) PUT(ENABLED) MAXDEPTH($maxdepth) REPLACE
SET AUTHREC PROFILE($qname) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(ALL)
我正在尝试使用q程序实用程序将消息从TEST1复制到TEST2:
q-xb-mQM_测试-iTEST1-mQM_测试-oTEST2-p20
但是我得到了这个错误:
Paul Clarke的MQSeries Q计划[V6.0.0版本:2012年5月2日]
连接…失败。对象“QM_TEST”上的MQCONNX返回2035未返回
授权的
我正在运行WebSphereMQV7.1。服务器上安装了q SupportPac,我正在服务器上执行q命令。我想不出一种方法来通过通道名测试,即通道和端口号1414,这就是问题所在吗 程序通过共享内存而不是使用SVRCONN通道以绑定模式连接到QMgr。您可以通过
ALTER QMGR AUTHOREV(ENABLED)
然后查看在QMGR事件队列中生成的授权事件来验证这一点。如果已安装,则可以右键单击队列并选择“格式化事件消息”,以人类可读的格式查看它。无论采用哪种方式,您都应该看到,用于连接的ID不是tcs mq user
,而是用于运行Q程序的任何ID。尝试:
q -lmqic -xc -iTEST1 -oTEST2 -p20
当使用-xc
运行时,程序将提示您频道详细信息
Q程序可以将队列转储到文件中,但它不是为此而设计的。来自的QLoad程序就是为此而设计的,它将捕获消息的所有方面,如果您获得适当授权,还将完整地恢复它们。这包括消息ID、时间戳等
最后,简要介绍一下您文章中的AUTHREC
语句。由于您费心创建了一个低权限的MCAUSER
,并为其设置了权限,因此我猜想您希望该ID不具有管理权限。请注意,在QMgr上授予用户+set
或+setall
,允许他们使用WMQ Explorer或任何其他使用PCF命令的工具来管理授权记录。考虑对QMGR的权限限制:<代码> +DSP+Inq+Connect < /C> >
通常,应用程序不会访问DLQ,而是访问特定于应用程序的回退队列。如果该应用程序被授予访问DLQ的权限,它通常只是将消息放在那里,而不是将它们放回去。这是因为DLQ是一个系统范围的资源,如果QMgr是共享的,则来自多个应用程序的消息可能会到达DLQ。作为安全预防措施,将该队列上的删除权限限制为管理员。这样,在应用程序清理后,用户就不会意外(或以其他方式)删除属于其他应用程序的消息
更新:回顾你的帖子,我注意到另一个差异。我假设您收到2035授权错误,因为您在绑定模式下使用的ID不是
mqm
或tcs mq user
。再次查看后,我意识到您从未授权mq user
组访问您试图访问的队列。您已将其授权给此场景中未使用的命令队列和应答模型。(WMQ Explorer使用它们。)因此,添加以下规则:
SET AUTHREC PROFILE(TEST1) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(PUT,GET,INQ,BROWSE)
SET AUTHREC PROFILE(TEST2) OBJTYPE(QUEUE) GROUP('mq-user') AUTHADD(PUT,GET,INQ,BROWSE)
如果您实际上是以tcs mq用户的身份连接,这将解决身份验证问题
据我所知,没有办法在命令行上将通道传递给Q,但它确实接受标准。例如:
export MQSERVER="$cname/TCP/localhost($port)"
…其中,$cname
是频道名称,$port
是端口。这是我的测试:
tcs-mq-user:~> export MQSERVER="TEST.SVRCONN/TCP/localhost(1414)"
tcs-mq-user:~> q -xb -iTEST1 -mQMTEST -lmqic
MQSeries Q Program by Paul Clarke [ V6.0.0 Build:May 2 2012 ]
Connecting ...connected to 'JMSDEMO'.
No more messages.
tcs-mq-user:~>
至于为什么找不到客户端libs,您是否安装了它们
tcs-mq-user:~> rpm -qa | grep MQSeriesClient
MQSeriesClient-7.5.0-0
程序通过共享内存而不是使用SVRCONN通道以绑定模式连接到QMgr。您可以通过ALTER QMGR AUTHOREV(ENABLED)
然后查看在QMGR事件队列中生成的授权事件来验证这一点。如果已安装,则可以右键单击队列并选择“格式化事件消息”,以人类可读的格式查看它。无论采用哪种方式,您都应该看到,用于连接的ID不是tcs mq user
,而是用于运行Q程序的任何ID。尝试:
q -lmqic -xc -iTEST1 -oTEST2 -p20
当使用-xc
运行时,程序将提示您频道详细信息
Q程序可以将队列转储到文件中,但它不是为此而设计的。来自的QLoad程序就是为此而设计的,它将捕获消息的所有方面,如果您获得适当授权,还将完整地恢复它们。这包括消息ID、时间戳等
最后,简要介绍一下您文章中的AUTHREC
语句。由于您费心创建了一个低权限的MCAUSER
,并为其设置了权限,因此我猜想您希望该ID不具有管理权限。请注意,在QMgr上授予用户+set
或+setall
,允许他们使用WMQ Explorer或任何其他使用PCF命令的工具来管理授权记录。考虑对QMGR的权限限制:<代码> +DSP+Inq+Connect < /C> >
通常,应用程序不会访问DLQ,而是访问特定于应用程序的回退队列。如果该应用程序被授予访问DLQ的权限,它通常只是将消息放在那里,而不是将它们放回去。这是因为DLQ是一个系统范围的资源,如果QMgr是共享的,则来自多个应用程序的消息可能会到达DLQ。作为安全预防措施,将该队列上的删除权限限制为管理员。这样,在应用程序清理后,用户就不会意外(或以其他方式)删除属于其他应用程序的消息
更新:
回顾你的帖子,我注意到另一个差异。我假设您收到2035授权错误,因为您在绑定模式下使用的ID不是