这是对Can create Websphere Queue Manager but not connect
的跟进我正在尝试在开发计算机上设置MQ,但如果我尝试使用我的域帐户连接到它,则无法进行身份验证(AMQ4999)。进一步挖掘我在错误日志中找到了这个:
AMQ8079:尝试检索组成员身份时拒绝访问 用户'xxx @ domain'的信息。
现在我非常了解MQ的已知问题,因为它无法验证域帐户,因为它无法访问其成员信息,并且已从日志中确认这肯定是这里发生的事情,所以我尝试覆盖这个使用上一篇文章中收集的以下脚本:
DEFINE CHL('DOTNET.SVRCONN') CHLTYPE(SVRCONN) MCAUSER('MUSR_MQADMIN@hostname')
SET CHLAUTH('DOTNET.SVRCONN') TYPE(BLOCKUSER) USERLIST('nobody')
SET CHLAUTH('DOTNET.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL) ACTION(ADD)
但是,即使有了这个频道,我仍然无法在登录我的域帐户时连接到队列管理器。我仍然困扰着我之前遇到的完全相同的错误。我注意到的一件事是,即使我启动它,MQ Explorer也会将该通道报告为非活动状态(尽管根据我从IBM网站上的读数判断这是正常的)。
我仍然是MQ的新手所以我想我要么缺少某些东西或做错了什么,但理想情况下我希望能够设置一个开发环境,我可以在不依赖于'runas'命令。我还应该强调,这完全是开发/学习,所以显然我并不关心安全性。
更新
我发现我做错了什么 - 确实我错过了一步。多一点背景。创建QM后,我尝试使用简单的C#客户端连接到它。最初我写的代码看起来像这样:
var queueManager = new MQQueueManager("MyQueueManager", MQC.MQCNO_STANDARD_BINDING);
此外,当尝试通过MQExplorer进行连接时,两者似乎都使用我的域凭据进行身份验证。但是当我显式创建一个属性对象并指定了这样的通道时:
var props = new Hashtable() {
[MQC.HOST_NAME_PROPERTY] = "localhost",
[MQC.PORT_PROPERTY] = 1414,
[MQC.CHANNEL_PROPERTY] = "DOTNET.SVRCONN",
[MQC.USER_ID_PROPERTY] = "DevMQUser",
[MQC.PASSWORD_PROPERTY] = "p@$$w0rd"
};
var queueManager = new MQQueueManager("MyQueueManager", props);
然后一切正常。我仍然需要以本地用户身份运行MQExplorer.exe(甚至在连接详细信息中明确设置凭据>属性似乎不起作用),但这不是什么大问题。
感谢您的建议。
答案 0 :(得分:1)
尝试更改...
SET CHLAUTH('DOTNET.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(CHANNEL)
要...
SET CHLAUTH('DOTNET.SVRCONN') TYPE(ADDRESSMAP) ADDRESS('*') USERSRC(MAP) MCAUSER(MUSR_MQADMIN)
USERSRC(CHANNEL)
表示要使用提供给频道的ID(在本例中为您登录帐户的本地进程ID)来覆盖MCAUSER
。
MQ安全诊断
对于通道上的连接问题,请抓取SupportPac MS0P并安装到MQ Explorer中。然后启用授权事件和通道事件并重新创建问题。如果连接被CHLAUTH记录阻止,则会显示在Channel Event队列中。如果它被OAM阻止,它将显示在QMgr事件队列中。在安装了MS0P的资源管理器中,右键单击“队列”面板中的队列名称将打开一个上下文对话框,其中包含"格式化事件消息"作为一种选择。选择是,MS0P将PCF消息解析为人类可读的值,显示呈现给MQ的所有参数以及阻止连接的原因。
IBM MQ v8
如果这是MQ的v8,则还要进行ID和密码检查以进行配置。如果QMgr指向指定ID和密码检查的AUTHINFO
记录(IDPWOS
),则在设置ID时密码不能为空。即使密码验证设置为OPTIONAL
,也会检查通道上是否存在ID,除非特别重写,否则客户端代码将确保该ID为真。