连接MQ时出现错误 '2035' ('MQRC_NOT_AUTHORIZED')。

20

在连接IBM MQ时,我遇到了这个错误。 我知道这是权限问题,但有没有办法只检查与IBM MQ的连接?

请提供建议。

9个回答

10
2035错误提示表明您的连接已经到达了QMgr。如果您使用了错误的通道名称、主机或端口,则会返回2059错误。2035错误意味着连接已经到达侦听器,找到了所请求的名称的通道并尝试建立连接。
如果您想测试超过此点,将需要授权您用于连接的ID或将授权的ID放入通道的MCAUSER属性中。
有关WMQ安全性在客户端通道上如何工作的详细说明,请参见http://t-rob.net/links上的WMQ基础加固演示文稿。

天啊!这个技术说明太糟糕了!我会联系IBM,看看能否让他们修复它。请注意,列出的缺陷是与IBM FTM有关,而不是MQ本身。我的建议是正确授权尝试连接的用户。IBM的建议是禁用CONNAUTH。由于CONNAUTH非常糟糕,这是一个好建议,但是假设有人遵循它,他们仍然需要连接的ID在MQ上得到适当的授权。感谢提供链接! - T.Rob

5

如果您启用了授权消息,则2035将出现在事件队列中。然后,您可以查看消息,查看使用哪个ID进行连接以及使用了哪些选项。 2035可能是因为您请求对队列管理器进行设置权限或其他您不应该拥有的权限。 授权消息将向您显示。


3
你有一个描述如何做到这一点的链接吗? - Nathan Lee

2

您也可以通过设置mcauser('mqm')来解决此问题..我成功地克服了2035错误。

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

特别感谢我的前辈 Bilal Ahmad (PSE)


这个答案中的建议不是一个好的使用方法。通过设置 MCAUSER('mqm'),您将为应用程序提供完整的 MQ 管理权限。此外,请注意,在 MQ v7.1 及更高版本中,默认情况下 CHLAUTH 规则将阻止此连接正常工作。 - JoshMc

0

我也曾经苦苦挣扎,最终找到了这个解决方案。(如果你认为关闭身份验证是一个解决方案的话。)

我正在使用版本 - IBM Websphere 9.1.0.201807091223

从IBM的网站上,他们建议关闭连接身份验证!!!

解决问题:禁用通道身份验证

您需要禁用连接身份验证,至少暂时需要这样做。在FTM for Check中有已知问题,涉及使用MQ连接授权。这些问题正在积极解决,并将在未来的修复程序中得到修复。目标是fixpack 3.0.0.8。

禁用连接身份验证的步骤:打开MQ命令控制台并键入runmqsc ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(NONE) CHCKLOCL(NONE),重启此队列管理器以使此更改生效。

来源 http://www-01.ibm.com/support/docview.wss?uid=swg21962081


0

您需要与MQ管理员检查权限。


0

您可以使用dspmqaut来检查授权。 以下是将用户poc授予对队列管理器QM1和队列LQ1的访问权限的示例

 # check the access right of user POC to QM1
 dspmqaut -m QM1 -n LQ1 -t q -p poc

 # if you want to give access, you should use 
 setmqaut -m QM1 -n LQ1 -t q -p poc <access Types>
 # eg (put everything - in the real live scenario, choose only what you want to grant) :
 setmqaut -m QM1 -n LQ1 -t q -p poc +put +get +browse +inq +set +crt +dlt +chg +dsp +passid +setid +setall +clr 

然后不要忘记使用以下命令重新启动QM1:

  endmqm -i QM1
  strmqm QM1

最后,您应该能够无错误地进行,避免出现2035错误。


1
添加新的OAM规则后,不需要重新启动队列管理器。 - JoshMc
除非您在Windows上使用MQ或在Unix / Linux上使用MQv8或更高版本并使用“SecurityPolicy = user”,否则不建议使用“-p”标志授予权限。这是因为在v8之前的Unix / Linux上,默认情况下在v8及更高版本中,生成的OAM规则实际上是授予指定用户的主要组而不是用户本身。许多情况都会导致这种情况变得糟糕,例如如果默认情况下有大量用户具有相同的主要组(例如:组“users”)。 - JoshMc

0
如果您在测试或开发环境中使用MQSeries 9.1,可以通过以下方法禁用通道身份验证: - 使用以下命令启动MQ命令行实用程序: runmqsc(例如:runmqsc QM1) - 使用以下命令为所有通道禁用身份验证: ALTER QMGR CHLAUTH(DISABLED)

-1

错误 MQRC 2035 基本上意味着您的应用程序已能够连接到队列管理器,但由于某些权限/授权的缺失,它无法放置/获取/发布/订阅消息。

为解决此问题,首先尝试按顺序执行以下步骤以禁用队列管理器和通道的授权。仅在不是生产队列管理器时使用此选项。

  1. 始终检查队列管理器日志。它会告诉您需要查看和解决的确切问题。

  2. 在这种情况下,通常可以在对队列管理器进行 runmqsc 后发出以下命令:

    ALTER QMGR CHLAUTH(DISABLED)
    

然后将authinfo下的chckclnt对象设置为可选项

  1. 显示 QMGR CONNAUTH
    显示 AUTHINFO(上面的名称) ALL  //上一个命令中的名称
    
    修改 AUTHINFO(上面的名称) AUTHTYPE(IDPWOS) ADOPTCTX(YES)
    
    修改 AUTHINFO(上面的名称) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
    
    刷新 SECURITY TYPE(CONNAUTH)
    
  2. SET CHLAUTH('*') TYPE(BLOCKUSER) ACTION(REMOVEALL)

    这将帮助删除通道对任何用户创建的所有阻止。

     SET CHLAUTH(您的通道名称) TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL)
    

由于我们已禁用应用程序必须通过的所有授权才能在队列管理器上执行任何操作,因此这应该解决您的问题。

现在,如果您正在使用生产队列管理器,请永远不要删除授权。 前往您在 MQ 浏览器中配置的任何 QM 上右键单击。转到 QM 权限和权限记录。单击创建新用户,并以与应用程序使用的用户名相同的名称命名。选择所有复选框,然后从下面的空格复制所有给定的命令。即 setmqaut。使用您的队列管理器名称编辑它们并发出!

----永不放弃,答案就在你还没有找到的地方--------


-1

对于在Windows上运行的Q/Q管理器,您可能需要在Q/Q管理器机器上创建用户[即在Q机器上创建与Q客户端机器上的用户匹配的用户],然后将该用户添加到该机器上的“mqm”组中。

步骤:

  1. 确保正在用于创建Q CLIENT的域用户[即Q客户端应用程序正在其中运行的用户]也存在于具有Q/Q管理器的计算机上。您可以只在Q/Q管理器框中创建本地用户[或者您可能需要进行一些更复杂的Active Directory用户创建 - 我无法帮助您]。

  2. 在Q/Q管理器框中,将您刚刚创建的用户[或现有用户,如果已经存在]添加到mqm组中。[在Windows服务器框中,您需要使用Microsoft Management Console(1.从命令行输入“mmc”,2.文件>添加/删除SnapOn>本地用户和组,3.将用户添加到组中)。]“mqm”组应该已经存在于Q/Q管理器机器上。


通过将用户添加到mqm组,您正在授予该用户完全的MQ管理权限,这是不推荐的,应该授予应用程序执行其功能所需的最低权限。另请注意,在MQ v7.1及更高版本中,默认情况下CHLAUTH规则将阻止解析为MQ管理员用户的连接工作。 - JoshMc
@JoshMc 那么推荐的分辨率是多少? - david.barkhuizen
在Windows上,您可以直接授予权限给用户。在Unix的v8之前,您可以将用户添加到mqm以外的组中,并授予该组权限。在Unix的v8及更高版本中,您可以在qm.ini中设置“SecurityPolicy = user”,并直接向用户授予权限。 - JoshMc

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