2012-09-17 122 views
2

我试图用Hermes JMS连接到Websphere MQ 7.1,但我无法连接。我已经按照他们的惯例,加载所有罐子没有问题,设置插件,设置所有变量(主机名,端口,transportType,queuemanager),检查底部表示用户并输入用户名和密码的框,并在确认I试图发现但是我收到以下消息:Hermes JMS无法连接到Websphere MQ 7.1(2035错误)

com.ibm.mq.MQException:MQJE001:完成代码'2',原因'2035'。 在 com.ibm.mq.MQManagedConnectionJ11。(MQManagedConnectionJ11.java:233) 处 com.ibm.mq.MQClientManagedConnectionFactoryJ11.createManagedConnection com.ibm.mq.MQClientManagedConnectionFactoryJ11._createManagedConnection(MQClientManagedConnectionFactoryJ11.java:553)(MQClientManagedConnectionFactoryJ11的.java:593) 在 com.ibm.mq.StoredManagedConnection(StoredManagedConnection.java:95) 在 com.ibm.mq.MQSimpleConnectionManager.allocateConnection(MQSimpleConnectionManager.java:198) 在 com.ibm.mq。 .QQueueManagerFactory.obtainBaseMQQueueManager(MQQueueManagerFactory.java:882) at co m.ibm.mq.MQQueueManagerFactory.procure(MQQueueManagerFactory.java:770) 在 com.ibm.mq.MQQueueManagerFactory.constructQueueManager(MQQueueManagerFactory.java:719) 在 com.ibm.mq.MQQueueManagerFactory.createQueueManager(MQQueueManagerFactory。的java:175) 在com.ibm.mq.MQQueueManager(MQQueueManager.java:647)在 hermes.ext.mq.MQSeriesAdmin.getQueueManager(MQSeriesAdmin.java:107) 在 hermes.ext.mq.MQSeriesAdmin。 discoverDestinationConfigs(MQSeriesAdmin.java:280) 在 hermes.impl.HermesAdminAdapter.discoverDestinationConfigs(HermesAdminAdapter.java:82) 在 hermes.impl.DefaultHermesImpl.discoverDestinationConfigs(Defau ltHermesImpl.java:1126) 在 hermes.browser.tasks.DiscoverDestinationsTask.invoke(DiscoverDestinationsTask.java:77) 在hermes.browser.tasks.TaskSupport.run(TaskSupport.java:175)在 hermes.browser.tasks .ThreadPool.run(ThreadPool.java:170)在 java.lang.Thread.run(Thread.java:662)

摸索与研究网的几个小时之后,似乎问题是它由于授权不良而无法连接,但是我可以使用Java代码进行连接(使用相同的lib MQQueueConnectionFactory),并且我也能够使用QueueZee与完全相同的库进行连接,获取所有队列的列表并浏览它们所以我知道用户授权问题sh不应该是问题。

我正在运行Hermes JMS 1.14,我尝试使用Java 1.6.0_33和1.7.0_5。 Websphere MQ在版本7.1.0.0上运行,并且这些库是从远程服务器上的此安装获取的。

我试图设置通道变量为SYSTEM.DEF.SVRCONN,这是我在QueueZee中使用它得到它的工作,但仍然是同一个问题。

以前有没有人看过这个问题,希望能对这种情况有所了解?

回答

1

在V7.1中,默认情况下,新的CHLAUTH规则默认禁止访问SYSTEM.ADMIN.SVRCONN之外的所有SYSTEM。*通道,并且不允许在任何SVRCONN通道上进行管理访问。为了诊断这一点,有必要知道使用了哪个通道,设置的CHLAUTH规则,通道定义(特别是MCAUSER值)以及所使用的ID是否在mqm组中。

你没有提到QueueZee设置是否也是V7.1 QMgr或特别是这个。大胆猜测,我会说启用CHLAUTH规则,并且此时禁用SYSTEM.DEF.SVRCONN通道。推荐的步骤是定义一个名称不以SYSTEM开头的新频道。并确保使用的ID不在mqm组中,但被授权为非管理员ID。

或者,可以使用mqm组中的ID,但您必须定义CHLAUTH规则才能使其工作。例如,默认的CHLAUTH规则使用CHANNEL(*) BLOCKUSER(*MQADMIN),您可以将其更改为CHANNEL(THE.NEW.CHL.NAME) BLOCKUSER('nobody')。新规则比旧规则更具体,因此在您的频道上占据优先地位。它告诉QMgr阻止用户ID'nobody',但忽略任何提及的* MQADMIN。由于'nobody'无权访问,但由于* MQADMIN未提及(因此未被i规则阻止),因此规则的作用是允许此频道的管理员访问。

作为一种快速,肮脏和临时的措施,您还可以使用ALTER QMGR CHLAUTH(DISABLED)以获得与v7.0和更早版本QMgrs中相同的行为。请注意,这允许使用mqm用户标识匿名远程管理和远程代码执行。这就是为什么默认设置发生了变化。现在,如果您需要远程管理访问权限,您必须明确规定。

有关此主题的更多信息,我建议IMPACT会议的Securing Your QMgr演示文稿。

请注意,应用程序发送的密码未被QMgr检查。该字段存在以便通道出口可以根据AD,LDAP等验证密码。如果没有这样的退出,密码将被忽略。客户端传入的用户ID或者通过面值接受,或者由通道的MCAUSER或CHLAUTH规则修改。

最后,有授权的问题时,诊断的最简单方法是ALTER QMGR AUTHOREV(ENABLED)然后用SupportPac MS0P来解码WMQ Explorer中的PCF消息。身份验证错误最终在QMgr事件队列中。每条消息都会告诉您失败auths的对象,针对该对象的API调用,调用的选项以及调用的ID。通常情况下,我们发现身份证打电话不是我们想要的,或者该程序正在使用它未授权的选项,因此这可能非常有用。

+0

谢谢你的回答。当我使用QueueZee时,我将它用于完全相同的频道和用户(以及相同的队列管理器和服务器),而且我也如上所述禁用了CHLAUTH,但这并没有帮助,问题仍然存在。 我开始认为这是爱马仕JMS本身的问题。 – ByteFlinger

+0

如果QueueZee可以使用该通道,那么它就是要传入的ID。您可以暂时将通道的MCAUSER设置为允许连接的值。但是,启用授权事件并使用[SupportPacs页面]中的[MS0P](http://ibm.co/SupptPacMS0P)或[MH05](http://ibm.co/SupptPacMH05)或其他事件显示工具之一, (http://ibm.co/SupptPacs)将使安全问题实际上诊断自己。长期回答结束于启用CHLAUTH并从QMgr设置MCAUSER,而不是从客户端设置。 –

+0

再次感谢,但我宁愿知道这个问题是在第一个地方。我会试着去看看MQExplorer是否能告诉我为什么会发生这种情况。 – ByteFlinger

0

不是一个真正的答案,只是对问题的一点研究。 我在小时前面临同样的问题。我传递的用户名如domain \ sortoflongusername,而我在WSMQ服务器上的系统日志中看到的是我的用户名被截断为12个符号。 我真的不熟悉hermesJMS和soapui(只是想给我们的测试人员把它作为测试平台),所以也许任何人都知道这个问题的根源。

+0

鉴于我使用QueueZee和Java代码完全相同的库,我认为爱马仕存在一个错误。我不确定你是否需要登录域名,但是我只尝试了用户名和密码,没有域名,而且长度比12个字符长得多,所以我不确定这是否是问题所在。 它不会帮你不允许,所以没有办法得到比发送电子邮件也许开发商以外的任何好帮手此刻的爱马仕论坛注册。 – ByteFlinger

相关问题