中的用户身份 IBM MQ
用户身份在连接队列管理器时需要经过验证,用于检查执行操作的权限,并记录在信息、事件和错误日志中。 应用程序连接时, IBM® MQ 可以从应用程序的主机操作系统继承 ID,也可以在连接时从应用程序获取 ID,还可以用队列管理器提供的 ID 进行管理覆盖。 可采用的用户身份长度有限制;这些限制取决于 ID 的来源、平台和 IBM MQ 版本。
什么是用户身份? (也称为用户名、用户或用户 ID)
IBM MQ 中的所有操作都是在特定用户身份的背景下执行的。 这一身份有几种重要的用途:
- 在连接队列管理器时,可以通过检查操作系统(OS)密码或调用外部存储库等方式对其进行验证。 该检查确认连接被允许作为该用户,以及(密切相关的)该用户有权连接到队列管理器。
- 它用于检查执行操作的权限。 例如,是否允许该用户打开特定队列或主题并输入信息? 授权可以针对特定用户定义,也可以针对包括用户在内的 "组 "定义,具体取决于所使用的身份验证存储库类型和队列管理器配置。
- 它被记录在信息中,这样收件人就能知道是谁发送了信息,并有可能根据他们的授权执行后续操作。
- 它还记录在事件、错误日志信息和其他类似的记录中,这些记录可能构成审计跟踪的重要部分,包括系统上的配置更改和应用程序消息传递活动。
这些核心原则适用于与 IBM MQ 的所有连接,无论是代表消息传递应用程序还是 IBM MQ 管理工具,如 runmqsc. 不过,根据应用程序类型和用于连接队列管理器的应用程序接口的不同,还需要注意一些特定的限制和额外的注意事项。
用户 ID 的来源如何影响 ID 的长度?
当代表已连接的应用程序发送消息时,用户身份会存储在 MQMD 的消息中。 为了与旧版应用程序代码兼容,该字段限制为 12 个字符。 请参阅用户身份长度限制(MQMD 和下游授权)。
验证和授权:操作系统(应用进程)用户 ID
传统上(默认情况下), IBM MQ 连接的用户身份是创建连接的操作系统进程的用户身份。 这既适用于与队列管理器运行在同一主机上的本地绑定应用程序,也适用于远程(客户端)应用程序。 不过,从 IBM MQ 客户端应用程序流出的断言身份容易受到恶意客户端或网络操纵的影响,因此通常应采用额外的客户端身份验证检查,以确保连接的应用程序有权在服务器上采用该身份。
在 z/OS® 上,队列管理器使用:- 对于 MVS (批处理),来自JES作业卡或已启动任务的用户标识符
- 对于 TSO,用户标识符在任务提交时传播给任务
- 对于 CICS® ,与任务相关的用户标识符
- 对于 IMS ,用户标识符取决于应用程序的类型:
- 对于未成功发出 GU 呼叫的非消息 BMP 区域、非消息 IFP 区域以及消息 BMP 和消息 IFP 区域,队列管理器使用区域 JES JOB 卡中的用户标识符或 TSO 用户标识符。 如果是空白或空值,则使用程序规范块(PSB)的名称。
- 对于已成功发出 GU 呼叫的 MPP 区域、消息 BMP 和消息 IFP 区域,队列管理器使用以下方式之一:
- 与报文相关的签名用户标识符
- 逻辑终端 (LTERM) 名称
- 地区 JES JOB 卡的用户标识符
- TSO 用户标识符
- PSB 名称
在 IBM i 上,队列管理器使用与应用程序作业相关联的用户配置文件的名称。![[AIX]](ngaix.gif)
在 AIX® and Linux® 上,队列管理器使用:- 应用程序的登录名
- 如果没有登录信息,进程的有效用户标识符
- 如果申请是 CICS 交易,与交易相关的用户标识符
在 Windows 系统上,队列管理器使用登录的用户名。
![[AIX]](ngaix.gif)
![[z/OS]](ngzos.gif)
在 z/OS, AIX and Linux 上,用户 ID 的最大长度为 12 个字符。
在 IBM i 上,用户 ID 的最大长度为 10 个字符。
在 Windows 上,如果 IBM MQ MQI client 和 IBM MQ 服务器都在 Windows 上,且服务器可以访问定义客户端用户 ID 的域,则用户 ID 的最大长度为 20 个字符。 但是,如果 IBM MQ 服务器不是 Windows 服务器,那么用户标识将截断为 12 个字符。
认证和授权:MQCSP 提供的凭证
应用程序可以在连接时使用 MQCSP 结构向 IBM MQ 明确提供用户 ID 和密码或身份验证令牌,而不是从操作系统或进程继承默认身份。 所提供的凭证可以通过运行队列管理器的操作系统进行身份验证(请参阅连接身份验证:配置中的 IDPWOS 信息)、通过 LDAP 存储库进行身份验证(请参阅连接身份验证:用户存储库中的 IDPWLDAP 信息)、通过加密令牌验证(请参阅使用身份验证令牌 ),甚至通过执行自定义退出代码进行身份验证。
如果使用 MQCSP 结构来传递凭据,用户 ID 的最大长度为 1024 个字符,但并非总能采用完整的身份。 请参阅用户身份长度限制(MQMD 和下游授权)。
在使用 connect(username, password) 风格的 IBM MQ 编程接口(包括 JMS 和 .NET 库)中,当调用这些适当的本地连接方法时,将代表应用程序创建 MQCSP。
用户身份长度限制(MQMD 和下游授权)
- IDPWLDAP "简称 "映射
- userclaim 字段
- MCAUSER
- CHLAUTH USERMAP 类型的规则
通常情况下,必须针对该简短用户或其所属组定义权限记录(请参阅组与用户权限管理 )。 例如,如果传入客户端用户 MyApplicationUser 已被映射到通道 MCAUSER shortid ,则可发布 setmqaut 或 SET AUTHREC 以定义 shortid 访问队列和其他需要访问的系统对象的权限。 IDPWLDAP 环境中是个例外,在这种环境中,如果长表单或短表单对相关用户记录是唯一的,则可以根据长表单或短表单定义权限。 请参见设置授权。
无论使用哪种身份验证机制,在 MQMD 中都需要包含一个 shortname ,如果用于随后的授权检查(在本队列管理器或其他队列管理器上),则 shortname 仍需进行适当的解析或授权。 它通常也是用户名的简称,在错误日志记录和报告队列管理器活动的事件消息中可见。
![[ MQ 9.4.3 2025 年 6 月]](ng943.gif)
![[MQ Appliance]](ngappliance.gif)
![[AIX]](ngaix.gif)
从 IBM MQ 9.4.3 开始,通过 IDPWOS 密码或令牌身份验证的连接可以采用较长的身份(最多 1024 个字符),这些用户的授权记录可以使用完整的较长身份来定义。 但请注意,对于从该连接发送的报文,MQMD 只存储截断形式(11 个字符,后缀为 "+"字符),并在限制为 12 个字符输出的任何事件和错误日志信息中报告。 虽然较长的身份适合简单的消息传递应用程序,但不适合在 MQMD 用户上下文中执行后续操作的应用程序,例如依赖 PCF 命令授权的管理工具,或使用 PUTAUT(CTX) 的队列管理器到队列管理器通道。 为防止不经考虑意外使用长身份,必须在队列管理器 qm.ini 文件中启用此功能。 参见 AllowLongUID.
组与用户权限管理
在 AIX and Linux 系统上,默认使用用户 ID 进行身份验证,使用组进行授权。 不过,您可以配置这些系统,根据用户 ID 进行授权。 更多信息,请参阅 AIX 和 Linux 上基于 OAM 用户的权限。 在 Windows 系统上,用户 ID 可用于身份验证和授权,而组可用于授权。
如果创建服务帐户,而不关注组,并以不同方式授权所有用户标识,那么每个用户都可以访问其他每个用户的信息。
保留字符和身份
用户 ID UNKNOWN 和组 NOBODY 对 IBM MQ 有特殊含义。 在操作系统中创建名为 UNKNOWN 的用户 ID 或名为 NOBODY 的组可能会产生意想不到的结果。
如果客户端以包含 @ 字符的用户 ID 运行,则 IBM MQ for Windows 服务器不支持连接 IBM MQ MQI client ;例如 abc@d. MQCONN 调用的返回代码是 MQRC_NOT_AUTHORIZED。 不过,您可以使用两个 @ 字符指定用户 ID,例如 abc@@d。 使用 id@domain 格式是首选做法,以确保用户 ID 始终在正确的域中解析;例如 abc@@ d@domain.
![[ MQ 9.4.3 2025 年 6 月]](ng943.gif)
更严格地验证 IBM MQ 用户 ID 字符
从 IBM MQ 9.4.3 开始,当连接到队列管理器时, IBM MQ 会对代表用户身份的字符串进行更仔细的验证。 这有助于确保在支持不同字符集的不同系统之间传输信息时,这些字符串不会造成问题。
如果您使用的是操作系统 (IDPWOS )或 LDAP (IDPWLDAP )身份验证,现有的常规做法以及平台和用户存储库验证通常足以满足这些更严格的要求。 因此,在现有部署中不太可能遇到问题。
如果 IBM 提供的对象授权管理器在启动时检测到任何授权记录涉及不合适的用户身份,则每发现一条此类记录就会报告一次警告信息。 AMQ5793 警告信息。