UserIdentifier (MQCHAR12)

这是消息的 身份上下文 的一部分。 有关消息上下文的更多信息,请参阅 MQMD 概述消息上下文

UserIdentifier 指定发起消息的应用程序的用户标识。 队列管理器将此信息视为字符数据,但不定义其格式。

接收到消息后,请在后续 MQOPEN 或 MQPUT1 调用的 ObjDesc 参数的 AlternateUserId 字段中使用 UserIdentifier ,以对 UserIdentifier 用户而不是执行打开操作的应用程序执行授权检查。

当队列管理器为 MQPUT 或 MQPUT1 调用生成此信息时:
  • z/OS®上,如果指定了 MQOO_ALTERNATE_USER_AUTHORITY 或 MQPMO_ALTERNATE_USER_AUTHORITY 选项,那么队列管理器将使用 MQOPEN 或 MQPUT1 调用的 ObjDesc 参数中的 AlternateUserId 。 如果未指定相关选项,那么队列管理器将使用从环境中确定的用户标识。
  • 在其他环境中,队列管理器始终使用根据环境确定的用户标识。
从环境中确定用户标识时:
  • z/OS上,队列管理器使用:
    • 对于 MVS (批处理) ,这是 JES JOB 卡或启动式任务中的用户标识
    • 对于 TSO ,在作业提交期间传播到作业的用户标识
    • 对于 CICS®,这是与任务关联的用户标识
    • 对于 IMS,用户标识取决于应用程序类型:
      • 针对:
        • 非消息 BMP 区域
        • 非消息 IFP 区域
        • 发出成功 GU 调用的消息 BMP 和消息 IFP 区域
        队列管理器使用区域 JES JOB 卡中的用户标识或 TSO 用户标识。 如果这些值为空白或空,那么它将使用程序规范块 (PSB) 的名称。
      • 针对:
        • 发出成功 GU 调用的消息 BMP 和消息 IFP 区域
        • MPP 区域
        队列管理器使用下列其中一项:
        • 与消息关联的注册用户标识
        • 逻辑终端 (LTERM) 名称
        • 区域 JES JOB 卡中的用户标识
        • TSO 用户标识
        • PSB 名称
  • IBM® i上,队列管理器使用与应用程序作业关联的用户概要文件的名称。
  • UNIX 系统上,队列管理器使用:
    • 应用程序的登录名
    • 进程的有效用户标识 (如果没有可用的登录)
    • 与事务关联的用户标识 (如果应用程序是 CICS 事务)
  • Windows 系统上,队列管理器使用已登录用户名的前 12 个字符。

此字段通常是队列管理器生成的输出字段,但对于 MQPUT 或 MQPUT1 调用,您可以使此字段成为输入/输出字段并指定 UserIdentification 字段,而不是让队列管理器生成此信息。 如果您不希望队列管理器为 MQPUT 或 MQPUT1 调用生成 UserIdentifier 字段,请在 PutMsgOpts 参数中指定 MQPMO_SET_IDENTITY_CONTEXT 或 MQPMO_SET_ALL_CONTEXT,并在 UserIdentifier 字段中指定用户 ID。

对于 MQPUT 和 MQPUT1 调用,如果在 PutMsgOpts 参数中指定了 MQPMO_SET_IDENTITY_CONTEXT 或 MQPMO_SET_ALL_CONTEXT ,那么这是输入/输出字段。 将废弃字段中空字符后面的任何信息。 队列管理器将空字符和任何后续字符转换为空白。 如果未指定 MQPMO_SET_IDENTITY_CONTEXT 或 MQPMO_SET_ALL_CONTEXT ,那么此字段在输入时将被忽略,并且是仅输出字段。

成功完成 MQPUT 或 MQPUT1 调用后,此字段包含随消息一起传输的 UserIdentifier (如果将其放入队列)。 如果保留消息,那么这将是 UserIdentifier 的值 (请参阅 MQPMO_RETAIN 的描述以获取有关保留发布的更多详细信息) ,但在将消息作为发布内容发送给订户时,不会将此值用作 UserIdentifier ,因为它们提供的值将覆盖发送给订户的所有发布内容中的 UserIdentifier 。 如果消息没有上下文,那么该字段完全为空白。

这是 MQGET 调用的输出字段。 此字段的长度由 MQ_USER_ID_LENGTH 给出。 此字段的初始值是 C 中的空字符串,以及其他编程语言中的 12 个空白字符。