2

我已经安装了 Websphere MQ 7.5 并编写了一个 Java 客户端来连接到队列。为了执行该任务,我创建了一个基于该通道的自定义连接到服务器SYSTEM.DEF.SVRCONN通道。

首先,为了阻止所有具有管理员权限的用户和所有频道的所有授权用户,我输入了这样一个命令 (runmqsc TEST_MANAGER): SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST('nobody', *MQADMIN)。现在我在 MQ Explorer 中看到了这个限制(TEST_MANAGER -> Channels -> Channel Identification Records)。

之后,为了向我的测试用户(Java 客户端)提供访问权限,我输入了这样的命令:

SET CHLAUTH(TEST_CHANNEL) TYPE(ADDRESSMAP) ADDRESS('*') MCAUSER('TestUser') .

最后,我在 Spring 的 UserCredentialsConnectionFactoryAdapter 中设置了用户名/密码对,其中用户名是 TestUser。

问题是我无法连接到2035 MQRC_NOT_AUTHORIZED异常。如果我删除 'nobody'/*MQADMIN 阻止规则,一切正常(仅存在 TestUser 客户端规则的规则)。

4

1 回答 1

2

设置 CHLAUTH(TEST_CHANNEL) 类型(ADDRESSMAP) 地址('*') MCAUSER('TestUser')

我不认为你理解这个命令。此命令表示连接到通道“TEST_CHANNEL”的所有应用程序都将使用“TestUser”的用户 ID。

我在 Spring 的 UserCredentialsConnectionFactoryAdapter 中设置了用户名/密码对,其中用户名是 TestUser。

设置密码毫无意义,因为 MQ 不执行身份验证。您需要购买第 3 方产品(即 MQAUSX)来处理身份验证。此外,您的 CHLAUTH 命令实际上覆盖了您在 Spring 应用程序中设置的任何 UserID。

问题是我无法连接 2035 MQRC_NOT_AUTHORIZED 异常。如果我删除 'nobody'/*MQADMIN 阻止规则,一切正常(仅存在 TestUser 客户端规则的规则)。

您是否使用 setmqaut 命令为用户 ID“TestUser”授予对队列管理器和队列的适当访问权限?

打开队列管理器的授权事件并查看 MQ 返回 2035 的确切原因。

于 2013-07-22T16:50:16.900 回答