解决 CHLAUTH 访问问题

使用通道认证记录 (CHLAUTH) 时解决某些访问问题的步骤和示例。

开始之前

注: 此任务中的步骤要求您运行 MQSC 命令。 执行此操作的方式因平台而异。 请参阅 使用 MQSC 命令管理 IBM® MQ

关于本任务

CHLAUTH 处理有三个缺省规则:
  • 任何 MQ-admin* 用户都不接受所有通道
  • 不接受所有 SYSTEM.* 所有用户的通道
  • ALLOW 访问 SYSTEM.ADMIN.SVRCONN 通道 (非 MQ-admin 用户)
前两个规则会阻止对所有通道的访问。 如果通道是 SYSTEM.ADMIN.SVRCONN 通道,因此允许在该通道上进行访问。
CHLAUTH 规则用于确定是否可以启动通道,并且它们允许通过 MCAUSER 映射到另一个用户标识。 如果无法启动通道,那么通常会发生以下错误:
  • rc 2035 mqrc_not_authorized
  • RC 2059 mqrc_q_mgr_not_available 
  • AMQ4036 不允许访问 
  • AMQ9776: 通道已被用户标识阻塞 
  • AMQ9777: 通道已阻塞 
  • MQJE001: 发生 MQException: 完成代码 2 ,原因 2035 
  • MQJE036: 队列管理器已拒绝连接尝试

您应该严格阻止访问,然后添加更多 CHLAUTH 规则以控制谁可以访问和启动通道。

作为临时措施,要对列出的错误进行故障诊断,请完成以下任何步骤。

过程

  • 禁用 CHLAUTH 规则

    作为临时措施,并且为了对以上错误进行故障诊断,您可以禁用 CHLAUTH 规则。 可以随时重新启用这些规则,如果禁用 CHLAUTH 规则可解决连接问题,那么您知道这是原因。

    要禁用 CHLAUTH 规则,请运行以下 MQSC 命令:
    ALTER QMGR CHLAUTH (DISABLED)
    请注意,您还可以将 CHLAUTH 设置为 WARN,这将允许访问并记录规则的结果。
  • 修改或除去 CHLAUTH 规则

    您还可以删除或修改 CHLAUTH 规则或规则,从而导致问题。

    要修改 CHLAUTH 规则,请使用带有 ACTION (REPLACE) 的 SET CHLAUTH 命令。 例如,要修改导致任何 MQ-admin 用户无法访问 WARN 的所有通道的缺省规则,而不是被阻止,请运行以下 MQSC 命令:
    
    SET CHLAUTH (*) TYPE (BLOCKUSER) USERLIST (*MQADMIN) WARN(YES) 
    ACTION (REPLACE)
    要删除 CHLAUTH 规则,请将 SET CHLAUTH 命令与 ACTION (REMOVE) 配合使用。 例如,要删除导致任何 MQ-admin 用户无法访问所有通道的缺省规则,请运行以下 MQSC 命令:
    
    SET CHLAUTH (*) TYPE (BLOCKUSER) USERLIST (*MQADMIN) ACTION (REMOVE)
  • 使用 MATCH (RUNCHECK) 测试访问
    您可以使用 CHLAUTH 规则的 MATCH (RUNCHECK) 选项来测试 CHLAUTH 规则的结果。 MATCH (RUNCHECK) 选项返回在运行时由特定入站通道匹配的记录 (如果该通道连接到此队列管理器)。 您必须提供:
    • 通道名
    • “地址”属性
    • SSLPEER 属性,仅当入站通道使用 SSL 或 TLS 时
    • QMNAME ,如果入站通道是队列管理器通道,或者
    • CLNTUSER 属性 (如果入站通道是客户机通道)
    以下示例运行 MQSC 命令以检查具有缺省规则的 CHLAUTH 规则将导致 MQ-admin 用户 johndoe 访问名为 CHAN1的通道:
    
    DISPLAY CHLAUTH (CHAN1) MATCH (RUNCHECK) CLNTUSER ('johndoe') ADDRESS
    ('192.168.1.138')
    
    AMQ8878: Display channel authentication record details.
    CHLAUTH(*) TYPE(BLOCKUSER)
    USERLIST(*MQADMIN)
    对于用户 johndoe,通道未运行,将由于 *MQADMIN 用户的 BLOCKUSER 规则而阻止用户。
    以下示例运行 MQSC 命令以检查具有缺省规则的 CHLAUTH 规则将导致用户 alice (非 MQ-admin 用户) 访问名为 CHAN1的通道:
    
    DISPLAY CHLAUTH (CHAN1) MATCH (RUNCHECK) CLNTUSER ('alice') ADDRESS
    ('192.168.1.138')
    
    AMQ9783: Channel will run using MCAUSER('alice').
    对于用户 alice,通道将运行,并且通道将 alice 作为 MCAUSER 传入。 MCAUSER 是用于检查 IBM MQ 对象权限的用户标识。