要运行样本应用程序,必须首先创建队列管理器。 然后,可将队列管理器配置为以安全方式接受来自以客户机方式运行的应用程序的入局连接请求。
开始之前
确保队列管理器已经存在并已启动。 通过发出 MQSC 命令确定是否已经启用通道认证记录:DISPLAY QMGR CHLAUTH
要点: 此任务期望启用通道认证记录。 如果这是由其他用户和应用程序使用的队列管理器,那么更改此设置将影响所有其他用户和应用程序。 如果队列管理器未使用通道认证记录,那么可以将步骤
4 替换为备用认证方法 (例如,安全出口) ,该方法将 MCAUSER 设置为您将在步骤
1中获取的
非特权用户标识 。
您必须知道应用程序期望使用的通道名称,以便可以允许应用程序使用该通道。 您还必须知道应用程序期望使用哪些对象(例如队列或主题),以便可以允许应用程序使用这些对象。
关于本任务
此任务创建要用于连接到队列管理器的客户机应用程序的非特权用户标识。 将会授予使客户机应用程序只能通过使用此用户标识来使用其所需的通道和队列的访问权。
过程
- 在队列管理器运行所在的系统上获取用户标识。 对于此任务,此用户标识不得是特权管理用户。 此用户标识将是客户机连接将在队列管理器上运行所使用的权限。
- 使用以下命令启动侦听器程序,其中:
- qmgr-name 是队列管理器的名称
- nnnn 是所选端口号
对于 AIX®, Linux®, and Windows 系统:
runmqlsr -t tcp -m qmgr-name -p nnnn
对于 IBM® i:
STRMQMLSR MQMNAME(qmgr-name) PORT(nnnn)
- 如果应用程序使用 SYSTEM.DEF.SVRCONN,那么表明已经定义此通道。 如果您的应用程序使用其它的通道,那么通过以下 MQSC 命令进行创建:
DEFINE CHANNEL(' channel-name ') CHLTYPE(SVRCONN) TRPTYPE(TCP) +
DESCR('Channel for use by sample programs')
其中
channel-name 是通道的名称。
- 通过发出以下 MQSC 命令,创建一个通道认证规则,只允许客户机系统的 IP 地址使用该通道:
SET CHLAUTH(' channel-name ') TYPE(ADDRESSMAP) ADDRESS(' client-machine-IP-address ') +
MCAUSER(' non-privileged-user-id ')
其中:
- channel-name 是通道的名称。
- client-machine-IP-address 是客户机系统的 IP 地址。 如果样本客户机应用程序与队列管理器在同一机器上运行,那么在应用程序即将使用“localhost”进行连接时,使用 IP 地址“127.0.0.1”。 如果即将接入若干不同客户端机器,那么可以使用模式或范围而不是单个 IP 地址。 请参阅 通用 IP 地址 以获取详细信息。
- non-privileged-user-id 是您在步骤 1 中获取的用户标识
- 如果应用程序使用 SYSTEM.DEFAULT.LOCAL.QUEUE,那么表明已经定义此队列。 如果应用程序使用另一个队列,那么通过发出以下 MQSC 命令创建:
DEFINE QLOCAL(' queue-name ') DESCR('Queue for use by sample programs')
其中,
queue-name 是队列的名称。
- 通过发出以下 MQSC 命令,授予连接队列管理器和查询队列管理器的访问权限:
SET AUTHREC OBJTYPE(QMGR) PRINCIPAL(' non-privileged-user-id ') +
AUTHADD(CONNECT, INQ)
其中
non-privileged-user-id 是您在步骤
1 中获取的用户标识。
- 如果您的应用程序是点对点应用程序,也就是说它使用队列,那么通过发出以下 MQSC 命令,授予访问权限,以允许通过要使用的用户标识来使用您的队列查询、放置和获取消息:
SET AUTHREC PROFILE(' queue-name ') OBJTYPE(QUEUE) +
PRINCIPAL(' non-privileged-user-id ') AUTHADD(PUT, GET, INQ, BROWSE)
其中:
- queue-name 是您的队列的名称
- non-privileged-user-id 是您在步骤 1 中获取的用户标识
- 如果应用程序是发布/预订应用程序,那么表明它利用主题,通过发出 MQSC 命令来授予访问权,以允许按用户标识使用主题进行发布和预订:
SET AUTHREC PROFILE('SYSTEM.BASE.TOPIC') OBJTYPE(TOPIC) +
PRINCIPAL(' non-privileged-user-id ') AUTHADD(PUB, SUB)
其中:
- non-privileged-user-id 是您在步骤 1 中获取的用户标识
- 这将给予对主题树中任何主题的 non-privileged-user-id 访问权,或者,可以使用 DEFINE TOPIC 来定义主题对象并仅授予对该主题对象引用的主题树部分的访问权。 请参阅 控制用户对主题的访问权 以获取详细信息。
后续操作
客户机应用程序现在可以连接到队列管理器并使用队列放置或获取消息。