我想使用SupportPac MA01中的Q程序在两个不同的队列之间移动消息。它在Windows机器上没有任何问题。
我正在尝试在AIX机器上运行它,并且收到 2035 - Not Authorized 错误消息。
当我执行复制命令时,我指定了标志-u <userid>
,但它仍然在说明
MQOPEN on Object 'queue name' returned 2035 Not authorized..
我的命令行如下所示:
q -u <myuserid> -xb -m sourceQMgr -I sourceQueue -m TargetQMgr -oDestinationQueue -p20
用户<myuserid>
确实具有从队列中读取和写入的相关权限。
感谢任何指示或帮助。
答案 0 :(得分:1)
在Q程序中,-U
参数设置消息中的用户ID,但不设置用于连接QMgr 的ID。如果在Windows框中连接时查看队列上的连接句柄,您将看到与句柄关联的ID是您的登录ID,而不是myuserid
。但是,MQMD.UserID
后消息的myuserid
将包含PUT
。
使用管理权限时,将自动授予此授权。在这种情况下,您提到在Windows框中您以管理员身份登录,这将允许该选项。如果在AIX框中您未在mqm组中使用ID,则需要明确授予+setid
权限才能使用-U
选项。
例如,假设myuserid
属于mygroup
。要使-U
选项正常工作,您需要执行此操作:
# +setid must be granted at both the QMgr *and* the queue
setmqaut -m TargetQMgr -t qmgr -g mygroup +connect +inq +setid
setmqaut -m TargetQMgr -n DestinationQueue -t queue -g mygroup +put +inq +setid
请注意,+setid
仅适用于放置邮件而不是获取邮件。但是,因为Q程序可能在连接到第一个QMgr时指定setID
选项,所以可能会在那里生成您看到的错误。如果是这种情况,请在源QMgr上运行相同的命令:
# +setid must be granted at both the QMgr *and* the queue
setmqaut -m SourceQMgr -t qmgr -g mygroup +connect +inq +setid
setmqaut -m SourceQMgr -n SourceQueue -t queue -g mygroup +browse +get +inq +setid
作为参考,请参阅Q程序的帮助,其中说明:
-U Sets the user ID in the message.
...以及 Granting authority to set context 上的信息中心部分。
顺便说一下,我找不到-u
(小写)选项,所以我假设它只是你帖子中的拼写错误,而你实际上正在使用-U
。当我在工作站上试用它时,该选项会产生所需的信息。