【问题标题】:Websphere MQ Explorer (AMQ4036) error when trying to access to MQ running in docker (ibmcom/mq)尝试访问在 docker (ibmcom/mq) 中运行的 MQ 时出现 Websphere MQ Explorer (AMQ4036) 错误
【发布时间】:2020-05-22 10:00:45
【问题描述】:

我正在使用最新的 ibmcom/mq 映像在 docker 上运行队列管理器,但是当我尝试使用 MQ Explorer。

我已使用以下命令在 MQSC (runmqsc) 中禁用 CHLAUTH
ALTER QMGR CHLAUTH(DISABLED)

我已使用以下命令禁用 CONNAUTH

ALTER QMGR CONNAUTH(' ')
REFRESH SECURITY TYPE(CONNAUTH)

我已经删除了图片的默认 CHLAUTH 规则

SET CHLAUTH(SYSTEM.ADMIN.SVRCONN) TYPE(ADDRESSMAP) ADDRESS(*) ACTION(REMOVE)
SET CHLAUTH(SYSTEM.*) TYPE(ADDRESSMAP) ADDRESS(*) ACTION(REMOVE)
SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST(*MQADMIN) ACTION(REMOVE)

我已经设置了一个 Listener 和一个频道,并为它们添加了一个队列

DEFINE LISTENER(LISTENER.TCP) TRPTYPE(TCP) PORT(30002) CONTROL(QMGR) REPLACE
START LISTENER(LISTENER.TCP)
DEFINE CHANNEL(SYSTEM.DEF.SVRCONN) CHLTYPE(SVRCONN) TRPTYPE(TCP) REPLACE
DEFINE QLOCAL('MyQueue') REPLACE

当我尝试使用 MQ Explorer 从 Windows 连接到通道 SYSTEM.DEF.SVRCONN 时,我收到了错误 (AMQ4036)。 /var/mqm/qmgrs/MyQueueManager/errors/AMQERR01.LOG进入docker容器的错误是:

----- cmqxrsrv.c : 2552 ---------------------------------------- --------------- 20 年 2 月 6 日 10:18:13 - 进程 (1658.19) 用户 (mqm) 程序 (amqrmppa) 主机(5652aa2322eb) 安装(Installation1) VRMF(9.1.4.0) QMgr(MyQueueManager) 时间(2020-02-06T10:18:13.718Z) ArithInsert1(2) ArithInsert2(2035) CommentInsert1(myWindowsId) AMQ9557E: 'myWindowsId' 的队列管理器用户标识初始化失败。 解释: 初始化用户 ID“myWindowsId”的调用因 CompCode 2 和原因而失败 2035.如果使用了MQCSP块,则MQCSP块中的用户ID为''。如果一个 使用了用户 ID 流,UID 标头中的用户 ID 为 '' 并且任何 CHLAUTH 对用户采用之前应用的规则进行了区分大小写的评估 这个值。 行动: 更正错误并重试。

我想使用队列管理器进行本地开发。您是否知道如何禁用我的 Windows 用户 ID 的安全性以便能够与 MQ Explorer 和 Application Server Weblogic 连接?

【问题讨论】:

  • 您能否详细说明您是如何解决该问题的?我有同样的问题。如果您可以提供示例 Docker 和代码,那将非常有帮助。非常感谢!

标签: ibm-mq


【解决方案1】:

我想知道您为什么需要禁用安全性。如果您正在运行资源管理器,那么下一步就是在资源管理器中添加您的队列管理器。来自教程 - https://developer.ibm.com/messaging/learn-mq/mq-tutorials/develop-mq-macos/

(我知道它适用于 Mac,但主要适用于 windows)。

这将是:

  1. 右键单击 MQ Explorer Navigator 框中的“队列管理器”,然后单击“添加远程队列管理器”。将出现一个弹出窗口。
  2. 添加您的队列管理器名称 - 如果是 Docker - QM1,然后单击下一步。
  3. 添加主机名或 IP 地址 - 如果是 Docker - localhost。
  4. 添加服务器连接通道 - 如果是 Docker - DEV.ADMIN.SVRCONN,然后单击“下一步”两次
  5. 勾选“启用用户识别”,如果 Docker - 默认为管理员。保持选中“提示输入密码”。
  6. 单击完成,然后为用户添加密码 - 如果是 Docker - passw0rd。您的队列管理器应该会出现。

【讨论】:

  • 我没有使用默认的 QM1 队列管理器。我使用以下命令运行我的 docker 容器 docker run -d --name ibmmq --env LICENSE=accept --env MQ_QMGR_NAME=MyQueueManager --env MQ_DEV=false -p 1414:1414 -p 9443:9443 -p 30002:30002 ibmcom/mq
  • 我正在寻找的是连接到通道 SYSTEM.DEF.SVRCONN 而无需识别。我只想允许我的机器用户 ID(Windows 用户)。
  • 默认情况下,如果您不以某种方式覆盖它,则您正在运行程序的用户从客户端传递到队列管理器并用于检查连接和访问队列上对象的授权经理。在这种情况下,用户在 docker 映像上不存在,因此它会失败。
  • 您可以尝试如上所述在 MQ Explorer 配置中指定用户名并选中兼容模式复选框,这将导致您指定的用户名从 MQ Explorer 传递到当前字段中的队列管理器有myWindowsId。只要您指定有权访问队列管理器的用户,如果您按照您所说的那样禁用安全性,那么mqm 用户将提供对队列管理器的完全访问权限。
  • 感谢您的链接。这证明了 IBM MQ 文档是多么糟糕,我花了几个小时的网络搜索来找出在设置后如何实际连接到我的 Docker 映像。
【解决方案2】:

如果您真的想禁用安全性并且不关心对此队列管理器的访问,只需执行以下操作(除了您已经完成的所有关闭安全性设置之外)。

ALTER CHANNEL(SYSTEM.DEF.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('user-id-in-mqm-group-on-docker')

问题是您的 'myWindowsId' 未定义到您的 docker 容器中的操作系统。上面的命令声明了MCAUSER字段中指定的用户ID,并且将忽略从你的Windows盒子通过通道流过的用户ID。

不过,我鼓励您尝试之前的答案,并学习如何在安全方面做得足够好,让自己进入,而不是全部关闭。

【讨论】:

  • 'user-id-in-mqm-group-on-docker' 是否应该与 'myWindowsId' 相同,或者我可以使用 docker 容器中的任何现有用户吗?
  • 请忽略我最后的评论。你的解决方案就像一个魅力。谢谢。
猜你喜欢
  • 1970-01-01
  • 2016-01-27
  • 1970-01-01
  • 2015-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-06
  • 2012-12-07
相关资源
最近更新 更多