提供对IBM WebSphere MQ的匿名访问

时间:2017-02-21 16:46:26

标签: ibm-mq

我是sampleuser的新手。我在root容器中运行它。用户' mqm'和' MCAUSER('sampleuser')'属于' ALTER QMGR PSNPRES(SAFE) ALTER QMGR PSMODE (ENABLED) DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('sampleuser') REPLACE '在conatiner内的小组。我能够从主机访问MQ作为' root'用户和' sampleuser' (我在主机中创建了' sampleuser')。

我想启用匿名身份验证,因此无论客户端用户ID如何,他们都应该能够访问MQ。我虽然ALTER QMGR PSNPRES(SAFE) ALTER QMGR PSMODE (ENABLED) SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST('*NOACCESS') DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('sampleuser') REPLACE 会为我做这件事。但它确实有效。我从eclipse IBM explorer获得错误AMQ4036(未经授权)。请指教。

EXPLANATION:
The user ID 'sampleuser' and its password were checked because the user ID is
privileged and the queue manager connection authority (CONNAUTH) configuration
refers to an authentication information (AUTHINFO) object named
'SYSTEM.DEFAULT.AUTHINFO.IDPWOS' with CHCKCLNT(REQDADM). 

This message accompanies a previous error to clarify the reason for the user ID
and password check.
ACTION:
Refer to the previous error for more information. 

Ensure that a password is specified by the client application and that the
password is correct for the user ID. The authentication configuration of the
queue manager connection determines the user ID repository. For example, the
local operating system user database or an LDAP server. 

To avoid the authentication check, you can either use an unprivileged user ID
or amend the authentication configuration of the queue manager. You can amend
the CHCKCLNT attribute in the CHLAUTH record, but you should generally not
allow unauthenticated remote access.

更新#1 我更新了代码以允许特权用户。但仍然失败。

ALTER QMGR PSNPRES(SAFE)
ALTER QMGR PSMODE (ENABLED)
ALTER QMGR CHLAUTH(DISABLED)
SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST('*NOACCESS')
DEFINE CHANNEL(SYSTEM.ADMIN.SVRCONN) CHLTYPE(SVRCONN) MCAUSER('sampleuser') REPLACE
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
REFRESH SECURITY TYPE(CONNAUTH)

这是我的日志。

foreach ($target as &$item) {
    foreach ($replacements as $replacement) {
        if ($item == $replacement->original) {
            $item = $replacement->replacement;
            break;
        }
    }
}

更新#2 根据JohnMC的回答和参考Provide anonymous access to IBM WebSphere MQ我终于让它发挥了作用.. :)

$replace_array = array();
foreach ($replacements as $replacement) {
    $replace_array[$replacement->original] = $replacement->$replacement;
}

1 个答案:

答案 0 :(得分:4)

我假设您使用的是受支持的MQ版本(7.1或更高版本)。

对于MQ 7.1及更高版本,默认情况下新的队列管理器将带有一些CHLAUTH规则,其中一个规则禁用具有MQ管理权限的用户与SVRCONN通道的连接。在这种情况下,您已将用户sampleuser放置在频道的MCAUSER中。由于sampleuser是mqm组的成员,因此默认情况下不允许这样做。

根据您提供的设置,如果允许连接,您将允许任何可以通过网络连接到MQ侦听器端口的用户管理队列管理器,定义队列,删除队列,添加权限等。

请看T.Rob的这个答案,了解如何在不禁用安全性“Unable to connect to queue manager in WebSphere MQ 7.1”的情况下完成此工作的更多细节。

我还有另一篇帖子,其中包含一些类似的信息“C# MQ Connect get Error 2035 but Java MQ Connect works well

更新#1

日志显示您收到连接身份验证错误。对于MQ 8.0及更高版本,缺省情况下,队列管理器配置为要求为MQ管理用户指定有效密码,因为sampleuser是mqm组的一部分,它属于此类别。

您可以将MQ Explorer配置为在连接到队列管理器时发送用户名和密码。

  1. 右键单击队列管理器名称
  2. 选择连接详细信息
  3. 选择属性...
  4. 选择用户ID
  5. 选中“启用用户识别”
  6. 旁边的复选框
  7. 填写Userid字段
  8. 如果您将其保留为“提示输入密码”,则每当您尝试连接到队列管理器时打开MQ Explorer以获取密码时,它都会询问您。您可以选择“使用已保存的密码”,然后提供密码。
  9. 我不建议您这样做,但如果您想要禁用安全性并允许任何人作为MQ管理员连接到您的队列管理器而不提供有效密码,您可以使用以下命令禁用此功能。

    ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)
    REFRESH SECURITY TYPE(CONNAUTH)
    
相关问题