IBM MQ - 创建和配置 Websphere MQ for Oracle SOA MQ 系列 Adapter



我创建了一个名为QM_MQ_TEST的队列管理器

crtmqm QM_MQ_TEST
strmqm  QM_MQ_TEST
runmqsc QM_MQ_TEST
DEFINE CHANNEL(QM_MQ_TEST) CHLTYPE(SVRCONN)
define listener(TCP.LISTENER) trptype(tcp) control(qmgr) port(1414)
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(NONE)
SET CHLAUTH(QM_MQ_TEST_SVRCONN) TYPE(ADDRESSMAP) ADDRESS(*) USERSRC(CHANNEL)
SET CHLAUTH(QM_MQ_TEST_SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody')

我仍然可以在 QM 日志中看到以下错误。

06/11/2015 12:19:26 PM - Process(10886.618) User(mqm) Program(amqzlaa0)
                    Host(abcd.com) Installation(Installation1)
                    VRMF(8.0.0.2) QMgr(QM_MQ_TEST)
AMQ8077: Entity 'oracle' has insufficient authority to access object
'QM_MQ_TEST'.
EXPLANATION:
The specified entity is not authorized to access the required object. The
following requested permissions are unauthorized: connect
ACTION:
Ensure that the correct level of authority has been set for this entity against
the required object, or ensure that the entity is a member of a privileged
group.
----- amqzfubx.c : 670 --------------------------------------------------------
06/11/2015 12:19:26 PM - Process(11046.643) User(mqm) Program(amqrmppa)
                    Host(abcd.com) Installation(Installation1)
                    VRMF(8.0.0.2) QMgr(QM_MQ_TEST)
AMQ9557: Queue Manager User ID initialization failed for 'oracle'.
EXPLANATION:
The call to initialize the User ID 'oracle' failed with CompCode 2 and Reason
2035.
ACTION:
Correct the error and try again.

有两个明显的问题。

DEFINE CHANNEL(QM_MQ_TEST)         CHLTYPE(SVRCONN)
SET    CHLAUTH(QM_MQ_TEST_SVRCONN) TYPE(ADDRESSMAP) ADDRESS(*) USERSRC(CHANNEL)
SET    CHLAUTH(QM_MQ_TEST_SVRCONN) TYPE(BLOCKUSER) USERLIST('nobody')
                         ^^^^^^^^

请注意,定义的通道的名称与 CHLAUTH 规则中的配置文件名称不匹配吗? 这些规则不可能应用于定义的通道。

第二个问题是用户 ID oracle没有连接到 QMgr 的权限。 通常,您希望授予对 QMgr 本身的+connect +inq,然后授予队列+put +get +browse +inq。 如果要更精确,请在一个队列上授予+put +inq,在另一个队列上授予+get +browse +inq

请注意,您始终必须为 Java 或 JMS 应用程序授予+inq,因为 IBM 的类会查询它们连接或打开的对象。 例如,在连接到 MQ 时,他们会询问版本以及是否指定了 DLQ。 在连接到队列时,他们会查找诸如 MAXMSGLBOQNAME .

因此,您可能需要也可能不需要+inq具体取决于应用程序的编写内容及其编码方式。 您可能还需要其他权限,例如 +passid 。 处理所需权限的最佳方法是将 SupportPac MS0P 安装到 MQ 资源管理器中,然后启用授权事件。 如果发生另一个授权错误,事件消息将告诉您调用失败的对象、请求访问的 ID、当时进行的 API 调用以及为调用指定的确切选项。 所有这些都将使用人类可读的语言,并通过 MQ 资源管理器访问,因此您不必每次都去寻找错误日志条目。

最后,由于 IBM 的文档和您在 Internet 上获得的许多随意建议都是错误的,请确保您了解当您授权委托人与组时会发生什么。

在 v8.0

之前的所有 MQ 版本上,默认情况下在 v8.0 中,当您对委托人运行setmqautSET AUTHREC时,MQ 会出去查找该 ID 的主组,并在权限授予中替换该 ID。 当 ID 的主要组不是预期值时,这可能会导致大量帐户的意外授权。 通常,向组而不是主体授予授权。

有两个例外。 首先,在 MQ v8.0 中,可以将 MQ 配置为直接针对委托人进行授权。 这样做的问题是,无论是否已进行该配置设置,充满对主体的授权的脚本都将成功而不会发出警告。 知道它有效的唯一方法是转储生成的授权记录并与原始脚本进行协调。 如果您不准备这样做,请避免在非 Windows 平台上按主体授予身份验证。

Windows

一直是一个例外,因为 MQ 记录针对 Windows 安全 ID 或"SID"的授权授权,并且帐户的 SID 在功能上等同于组的 SID。如果授权中使用的 ID 不合格,则会出现问题。

例如,在 Windows QMgr 上,如果我要执行此命令...

SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('oracle') AUTHADD(CONNECT)...然后,Windows 将尝试首先针对本地 SAM 数据库解析帐户oracle,然后针对它知道的域控制器解析它们当前碰巧处于的任何搜索顺序。

因此,假设 ID 是在 Windows 搜索的 5 个域控制器中的最后一个域控制器上定义的,并且有人在搜索链中较早的某个 DC 上创建了一个名为 oracle 的新帐户。 频道中的MCAUSER(oracle)将解析为具有不同 SID 的不同帐户。 连接将失败,并显示错误,尽管您能够显示明确授予"oracle"访问权限的 auiths 记录,但仍Entity 'oracle' has insufficient authority to access object 'QM_MQ_TEST'该错误。

因此,如果您决定授予对主体而不是组的访问权限,请确保将 v8.0 QMgr 设置为遵守该权限,或者在 Windows 上为授权命令和MCAUSER中的本地帐户或域帐户指定oracle@[host name here] oracle@[domain name here]

运行 qmgr 的服务器上是否有可用的"oracle"用户? 如果是,请为该用户添加连接机构。 您可能需要其他权限才能使适配器工作(例如,放入或进入特定队列)。 这将在 qmgr 日志中报告。

SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('oracle') AUTHADD(CONNECT)

最新更新