按照我目前的理解,所有的客户端连接都是通过两个级别的认证,通道级别和队列管理器级别,
在队列管理器级别,它使用 CONNAUTH
对象的 QMGR
属性值来确定如何完成身份验证(例如:使用主机操作系统用户存储库),如果 AUTHINFO
对象指定 AUTHINFO
,则它使用 ADOPTCTX(YES)
结构中包含的用户 ID 作为应用程序上下文的用户 ID,并用于授权或如果 {{1}在那里,运行客户端应用程序的用户 ID 用作应用程序上下文的用户 ID,而该用户 ID 用于授权。
在渠道层面,没有做任何与授权有关的事情。只有身份验证发生在那里配置。为了进行更精细的访问控制,将一组通道身份验证记录应用于通道。 MQCSP
的 ADOPTCTX(NO)
属性值仍用于确定要对其进行身份验证的用户存储库。
问题:
答案 0 :(得分:3)
您是正确的,应该分两个阶段考虑客户端连接的 MQ 应用程序的安全性。有一个认证阶段(你是谁?证明它!)和一个授权阶段(现在我知道你是谁,你可以做你想做的事吗?)。
客户端连接的 MQ 应用程序的身份验证可以通过检查应用程序(在 MQCSP 中)或通道级别的某些内容提供的用户 ID 和密码来完成。这本质上是对通道连接进行身份验证,但它与客户端应用程序密不可分。此通道身份验证可以使用 TLS 证书或安全出口以任何您喜欢的方式询问远程方。 [也有 IP 地址过滤,但我不会称之为身份验证]。
这些身份验证的目的是确定连接方是谁(并在必要时拒绝他们!)并为下一步(授权检查)分配适当的用户 ID。可以通过接受密码验证的用户 ID (ADOPTCTX(YES)
) 来分配此用户 ID;通过使用 CHLAUTH
规则映射证书 DN(或 IP 地址);通过安全出口设置 MCAUSER
;或者通过简单地将用户 ID 硬编码到 MCAUSER
中(不是身份验证,但仍然是一种为以后的授权检查分配用户 ID 的方法)。所有这些都有一个共同点,它们所做的最终都在运行的 SVRCONN
的 MCAUSER
字段中。您可以使用 DISPLAY CHSTATUS
显示它。
客户端连接的 MQ 应用程序的授权与本地绑定的 MQ 应用程序一样。根据相同的规则检查相同的操作。是否允许此用户“打开此队列进行放置”,或“查询此 QMgr 对象”,或“订阅此主题”等。区别仅在于如何获取该授权检查中使用的用户 ID - 即如何获取进入MCAUSER
。
总结(并检查我是否已经涵盖了您的所有问题):-
MCAUSER
属性包含此客户端应用程序的最终确定的用户 ID。在定义时,可以将其硬编码为用户 ID(有些人使用此方法将垃圾用户 ID 硬编码为 CHLAUTH
支持规则旁边的腰带和大括号)。MCAUSER
的运行时值进一步阅读