soa - 为 Oracle SOA MQ 系列适配器创建和配置 Websphere MQ

标签 soa ibm-mq

我创建了一个名为 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')
                         ^^^^^^^^

请注意已定义 channel 的名称与 CHLAUTH 规则中的配置文件名称不匹配?这些规则不可能适用于已定义的 channel 。

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

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

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

最后,由于 IBM 的文档和您在 Internet 上获得的许多随意建议都弄错了,因此请确保您了解当您授权 Principal 与 Group 时会发生什么。

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

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

Windows 一直是个异常(exception),因为 MQ 会根据 Windows 安全 ID 或“SID”记录授权授予,并且帐户的 SID 在功能上等同于组的 SID。如果授权中使用的 ID 不合格,就会出现问题。

例如,如果我要在 Windows QMgr 上执行此命令...SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('oracle') AUTHADD(CONNECT)...然后 Windows 将尝试解析帐户 oracle首先针对本地 SAM 数据库,然后针对它所知道的域 Controller ,无论它们目前处于何种搜索顺序。

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

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

关于soa - 为 Oracle SOA MQ 系列适配器创建和配置 Websphere MQ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30785620/

相关文章:

rest - YAML 作为表示服务之间交换的 REST 文档的方式不受欢迎吗?如果是,为什么?

java - 架构师迫切希望使用 SOAP over JMS

C# - Websphere MQ 版本 7.0.1 的 SSL

ssl - Websphere MQ Explorer SSL 字段 "Accept only certificates with Distinguished Names matching these values field"是否区分大小写?

MQ 多线程

java - Java错误堆栈的原因

NServiceBus 和决定服务边界

.net - 远程 UI 是否应该使用 SOA 来实现?

domain-driven-design - 订单和库存 DDD - 应该在哪里处理分配/保留?

linux - Linux下查看MQ权限和MCAUSER