在Java中当你设置MQEnvironment.userID
到一个值,该值实际上作为断言的用户 ID 传递到 MQ 队列管理器。
在C#中设置时MQEnvironment.UserId
到一个值,该值是not传递到 MQ 队列管理器,而不是将运行的 C# 进程的 ID 作为断言的用户 ID 传递。
如果断言用户未被其他配置(例如,SVRCONN
频道的MCAUSER
or CHLAUTH
将其映射到另一个 id 的规则。
使用您的 Java 应用程序发送mq
作为断言的用户 ID,并且这可能具有连接到队列管理器的适当权限,例如+connect +dsp
.
使用您的 C# 应用程序,您可以发送正在运行进程的用户 ID,并且该用户 ID 可能会这样做not具有连接到队列管理器的适当权限。
这表明您的 MQSVRCONN
频道有空白MCAUSER
并且没有 CHLAUTH 规则来覆盖该值。
解决此问题的一种方法是设置SVRCONN
频道的MCAUSER
to mq
。这可以通过类似的命令来完成ALTER CHL(ServerChannel) CHLTYPE(SVRCONN) MCAUSER('mq')
。然后,这将覆盖断言的用户 ID,并且 MQ 将始终使用该用户 IDmq
确定您拥有哪些授权,除非您有CHLAUTH
将其映射到其他用户 ID 的规则。
如果将其留空,那么任何人都可以轻松断言任何用户 ID。如果您没有禁用CHLAUTH
并且没有改变任何默认的CHLAUTH
如果在新的 MQ 7.1 或更高版本的队列管理器上设置了规则,则默认情况下将阻止具有 MQ 管理员权限的用户 ID 进行连接。如果您确实禁用了CHLAUTH
或者删除阻止具有 MQ 管理员权限的用户 ID 的规则,然后任何人都可以断言具有 MQ 管理员权限的用户 ID。
我建议您阅读有关 MQ 安全性的更多内容,以决定如何进一步保护 MQ 队列管理器。如果您还有其他问题,请使用标签将其作为新问题发布在 Stackoverflow 上ibm-mq由许多具有 MQ 知识的人(有些甚至来自 IBM)监控。
您可以在以下位置查看许多优秀的 MQ 安全相关演示:T.Rob 的网站.
Capitalware 每年都会赞助 MQ 技术会议,前几年的会议(其中许多与 MQ 安全相关)都存档在MQTC v2.0.1.7 的会话页面(看下面的底部往届 MQTC 会议).