我已经安装了Websphere MQ 7.5并编写了一个Java客户端来连接到队列。为了执行任务,我创建了一个基于SYSTEM.DEF.SVRCONN
频道的自定义连接服务器频道。
首先,要阻止具有管理员权限的所有用户以及所有通道的所有授权用户,我都会输入这样的命令(runmqsc TEST_MANAGER):SET CHLAUTH(*) TYPE(BLOCKUSER) USERLIST('nobody', *MQADMIN)
。现在我在MQ Explorer中看到了这个限制(TEST_MANAGER - >频道 - >频道识别记录)。
之后,为了向我的测试用户(Java客户端)提供访问权限,我输入了这样一个命令:
SET CHLAUTH(TEST_CHANNEL) TYPE(ADDRESSMAP) ADDRESS('*') MCAUSER('TestUser') .
最后,我在Spring的UserCredentialsConnectionFactoryAdapter中设置了用户名/密码对,用户名为TestUser。
问题是我无法连接2035
MQRC_NOT_AUTHORIZED
例外。如果我删除'nobody'/ * MQADMIN阻止规则,一切正常(只有TestUser客户端规则的规则出现)。
答案 0 :(得分:2)
SET CHLAUTH(TEST_CHANNEL)TYPE(ADDRESSMAP)ADDRESS('*') MCAUSER( '为TestUser')
我认为你不理解这个命令。此命令表示在通道'TEST_CHANNEL'上连接的所有应用程序将使用'TestUser'的UserID。
我在Spring中设置了用户名/密码对 UserCredentialsConnectionFactoryAdapter,用户名为 为TestUser。
设置密码毫无意义,因为MQ不执行身份验证。您需要购买第三方产品(即MQAUSX)来处理身份验证。此外,您的CHLAUTH命令实际上覆盖了您在Spring应用程序中设置的任何UserID。
问题是我无法连接2035 MQRC_NOT_AUTHORIZED异常。如果我删除'nobody'/ * MQADMIN阻止规则,一切正常(只有TestUser客户端规则的规则出现)。
您是否使用setmqaut命令为UserID'TestUser'提供对队列管理器和队列的适当访问权限?
打开队列管理器的Authority事件,并查看MQ返回2035的确切原因。