创建和配置Websphere MQ,用于Oracle SOA MQ系列适配器。

3
我创建了一个名为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.
2个回答

2
"有两个明显的问题。"
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。在连接到队列时,它们会查找诸如“MAXMSGL”和“BOQNAME”之类的内容。
所以,您可能需要或不需要+inq,这取决于应用程序的编写方式和编码方式。您还可能需要其他权限,例如+passid。解决所需权限的最佳方法是将SupportPac MS0P安装到MQ Explorer中,然后启用授权事件。如果出现另一个授权错误,事件消息将告诉您调用失败的对象、请求访问的ID、正在进行的API调用以及为调用指定的确切选项。所有这些都是用人类可读的语言编写的,并且可以通过MQ Explorer访问,因此您无需每次都去查找错误日志条目。

最后,由于IBM的文档和互联网上的许多非正式建议都是错误的,请确保您了解授权Principal与Group时会发生什么。

在MQ v8.0之前的所有版本中,默认情况下,在对主体运行setmqautSET AUTHREC时,MQ会查找该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会首先尝试解析帐户oracle,首先在本地SAM数据库中解析,然后针对它知道的域控制器进行解析,这些域控制器按照它们目前所处的搜索顺序进行排序。
因此,假设ID在Windows搜索的5个域控制器中的最后一个定义,并且某人在较早的搜索链中的一个DC上创建了一个名为oracle的新帐户。 通道中的MCAUSER(oracle)将解析为具有不同SID的不同帐户。 尽管您能够显示授予“oracle”访问权限的auiths记录,但连接将失败并显示错误消息“实体'oracle'没有足够的权限访问对象'QM_MQ_TEST'”。
因此,如果您决定授予主体而不是组访问权限,请确保v8.0 QMgr设置为支持该操作,或在Windows上,在授权命令和MCAUSER中都指定本地帐户的oracle@[host name here]或域帐户的oracle@[domain name here]

0
您在运行qmgr的服务器上是否有“oracle”用户可用?如果有,请为该用户添加连接权限。您可能需要其他权限才能使适配器正常工作(例如在特定队列上进行put或get操作)。这将在qmgr日志中报告。
SET AUTHREC OBJTYPE(QMGR) PRINCIPAL('oracle') AUTHADD(CONNECT)

如果他使用 PRINCIPAL 选项而不是你建议的 GROUP 选项,MQ 将会获取主要组并进行授权。如果主要组是 staffusers 呢?整个人群都应该被授予访问权限吗?在处理安全性时,通常最好不要允许隐式操作,而是明确指定您想要执行的操作。 - T.Rob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接