2017-02-20 65 views
1

授权错误与MQ8 + JDk8

MQException received while attempting reconnect: Reason Code=2035 
Exception text: com.ibm.mq.MQException: MQJE001: Completion Code '2', Reason '2035'. 

AMQERR01.LOG说

AMQ8077: Entity 'clientadmin' has insufficient authority to access object 
'TLSTEST.QM'. 

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. 

AMQ9557: Queue Manager User ID initialization failed for 'clientadmin'. 

EXPLANATION: 
The call to initialize the User ID 'clientadmin' failed with CompCode 2 and Reason 
2035. 
ACTION: 
Correct the error and try again. 

步骤如下进行网站和命令,但力量解决问题

http://www-01.ibm.com/support/docview.wss?uid=swg21680930 
http://www-01.ibm.com/support/docview.wss?uid=swg21577137 
ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL) 
REFRESH SECURITY TYPE(CONNAUTH) 

ALTER AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(NONE) 
REFRESH SECURITY TYPE(CONNAUTH) 

ALTER QMGR CHLAUTH(DISABLED) 

下面解决命令

去掉'SECURITYPOLICY =用户,只设置身份验证如下并重启QM

setmqaut -m TLSTEST.QM -t qmgr -p clientadmin +all 
setmqaut -m TLSTEST.QM -t queue -p clientadmin -n RECEIVE +all 
setmqaut -m TLSTEST.QM -t queue -p clientadmin -n SEND +all 

只是想知道,我怎么可以设置“+所有”在所有qmgr中的队列?将设置@渠道级别为qmgr中的所有队列设置?

任职,成功与下面的命令,并设置

'SecurityPolicy=user' 
    setmqaut -m TLSTEST.QM -t qmgr -p clientadmin +connect +dsp +inq 
    setmqaut -m TLSTEST.QM -t queue -p clientadmin -n RECEIVE +put +get +browse +dsp +inq 
    setmqaut -m TLSTEST.QM -t queue -p clientadmin -n SEND +put +get +browse +dsp +inq 
+0

有两种方法。 1.如果要使用-p并将权限授予特定用户,则需要SecurityPolicy = user设置。 2.如果您想针对某个组授予该用户是您的成员,则不需要SecurityPolicy = user设置,并且可以对该组使用-g。什么是错误的是你设置SecurityPolicy属性等于单词clientadmin,该属性的可能值是'user'或'group',如果你没有设置一个值,那么group是默认值。值“user”是文字字符串'user'不要用特定用户的名字替换它。 – JoshMc

+0

对你的最新评论感到困惑,我的应用程序需要'clientadmin'应该有权限访问qmgr和队列。我理解,使用'setmqaut'给予适当的特权,但是对'SecurityPolicy ='值感到困惑。因为我需要给用户级访问[clientadmin],'SecurityPolicy = clientadmin'是正确的方法? –

+0

不,“SecurityPolicy = user”是正确的方法。该设置是文字四字符字符串'用户'而不是特定用户的名称。一旦该设置就位,那么可以使用-p权限。 – JoshMc

回答

1

AUTHINFO(SYSTEM.DEFAULT.AUTHINFO.IDPWOS) AUTHTYPE(IDPWOS) CHCKCLNT(OPTIONAL)需要,如果密码被发送,这是一个有效的密码。

您得到的AMQ8077错误是因为用户没有连接到队列管理器的权限。

您必须授予OAM权限,允许clientadminconnect到队列管理器。


默认情况下,在Linux上,你可以授予MQ OAM权限只对一组用户是其成员,在你的情况下,一组clientadmin是其成员。在MQ V8.0及更高版本,如果下面的设置已被添加到qm.ini中,你还可以授予对用户本身的OAM权限:

Service: 
    SecurityPolicy=user 

并不需要上述的设置,它只是允许两种不同的方式授予OAM权限。这在IBM MQ V8.0知识中心页面“Principals and groups”中进行了说明。本页面状态:

UNIX和Linux系统

的ACL都基于这两个用户ID和组,你可以使用进行授权。

使用版本8.0,您可以使用基于用户的模型进行授权,这允许您同时使用用户和组。但是,当您在setmqaut命令中指定用户时,新权限仅适用于该用户,而不适用于该用户所属的任何组。

请参阅Installable services了解更多信息。

当您使用基于组的模型进行授权时,用户标识所属的主要组包含在ACL中。

不包括个人用户ID,并授予该组的所有成员权限。因此,请注意,您可以通过更改同一组中另一位委托人的权限,无意中更改委托人的权限。

这在IBM MQ V8.0知识中心页面“Installable services”中进行了说明。本页面状态:

SECURITYPOLICY =用户|组|默认

在UNIX和Linux系统上的值指定队列管理器是否使用基于用户的或基于组的授权。值不区分大小写。 如果不包含此属性,则使用缺省值,该值使用基于组的授权。重新启动队列管理器以使更改生效。


授予OAM权限连接到针对一组队列管理器,你可以使用MQSC命令SET AUTHREC做到这一点:

SET AUTHREC PROFILE('self') GROUP('groupname') OBJTYPE(QMGR) AUTHADD(CONNECT,DSP,INQ) 

同样可以使用命令行工具来完成setmqaut

setmqaut -m <queue_manager_name> -t qmgr -g groupname +connect +dsp +inq 

要授予OAM连接到队列管理器的权限

SET AUTHREC PROFILE('self') PRINCIPAL('clientadmin') OBJTYPE(QMGR) AUTHADD(CONNECT,DSP,INQ) 

同样可以使用命令行工具setmqaut来完成:

setmqaut -m <queue_manager_name> -t qmgr -p clientadmin +connect +dsp +inq 

您将需要也可以给予PUT或GET访问用户本身,你可以用MQSC命令SET AUTHREC做您想要访问的队列。使用MQSC命令SET AUTHREC下面的示例是使用主,但如果需要,可以改变它使用一组:

SET AUTHREC PROFILE('QUEUE.NAME') PRINCIPAL('clientadmin') OBJTYPE(QUEUE) AUTHADD(PUT,GET,BROWSE,DSP,INQ) 

同样可以使用命令行工具setmqaut来完成:

setmqaut -m <queue_manager_name> -t queue -p clientadmin +put +get +browse +dsp +inq 

更新2017年2月21日

不建议在不使用SecurityPolicy = user的情况下使用-p在Linux上设置权限。这是因为此操作不会针对使用-p指定的用户设置权限,而是在您运行该命令时将其设置为针对该用户的主要组。

这可能会导致各种情况下,我能想到的几个例子如下:

  1. 如果有两个用户使用相同的主组,你为他们提供不同的访问级别,它们都结束与与您运行的最后一个setmqaut命令相同的访问级别。
  2. 即使您向他们提供了相同级别的访问权限,但您可能希望从两位用户中的一位移除访问权限,并发出类似指令,并获得指定的权限-remove。结果是不是是您从两个用户中的一个中删除了访问权限,但您将其从两个用户中删除。
  3. unix帐户的主要组更改并不罕见。如果用户在更改后不是同一组的成员,则他们将无法访问MQ。

这也是不建议提供非管理用户与+all,如果你这样做,你可能会在用户,以及添加到mqm组,为他们提供完整的MQ管理权限。

您应该为用户提供所需的特定权限。我在我的示例中提供了适用于大多数应用程序的有限权限集。

+0

服务: SecurityPolicy = clientadmin在qm.ini中添加并重新启动MQ以及应用程序,dint resolve 2035问题。让我试试下面的命令,我相信下一个命令是unix级别权限 –

+0

我们将尝试使用提到的建议,编辑的问题 –