用户标识在 MQ 端从 kafka connect 客户端更改
userid is getting changed at the MQ side from kafka connect client
我正在使用 https://github.com/ibm-messaging/kafka-connect-mq-source
项目来构建连接器以将数据从 IBM MQ 提取到 Kafka 主题。
我看到一个问题,其中提供的 used-id
被修改为 system user
并且身份验证失败并出现以下错误:
MQ 管理员报告说我提供了不同的用户 ID。
我已配置为发送 MQUser
作为用户标识(我正在 linux 服务器上执行此连接器)。但是到了MQ时,userid被修改为wljay
(也就是我在服务器上登录的用户)
ERROR MQ error: CompCode 2, Reason 2035 MQRC_NOT_AUTHORIZED
(com.ibm.eventstreams.connect.mqsource.JMSReader:413)
INFO Polling for records
(com.ibm.eventstreams.connect.mqsource.MQSourceTask:120)
ERROR JMS exception {} (com.ibm.eventstreams.connect.mqsource.JMSReader:362)
com.ibm.msg.client.jms.DetailedJMSSecurityRuntimeException: JMSWMQ2008: Failed to open MQ queue 'LOC.E.KAFKA.QUEUE'.
JMS attempted to perform an MQOPEN, but IBM MQ reported an error.
Use the linked exception to determine the cause of this error. Check that the specified queue and queue manager are defined correctly.
at com.ibm.msg.client.jms.DetailedJMSSecurityException.getUnchecked(DetailedJMSSecurityException.java:270)
at com.ibm.msg.client.jms.internal.JmsErrorUtils.convertJMSException(JmsErrorUtils.java:173)
at com.ibm.msg.client.jms.internal.JmsContextImpl.createConsumer(JmsContextImpl.java:416)
at com.ibm.eventstreams.connect.mqsource.JMSReader.connectInternal(JMSReader.java:342)
at com.ibm.eventstreams.connect.mqsource.JMSReader.receive(JMSReader.java:225)
at com.ibm.eventstreams.connect.mqsource.MQSourceTask.poll(MQSourceTask.java:124)
at org.apache.kafka.connect.runtime.WorkerSourceTask.poll(WorkerSourceTask.java:244)
at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:220)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:175)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:219)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:222)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:156)
at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.initialize(WMQConsumerShadow.java:1176)
at com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.initialize(WMQSyncConsumerShadow.java:133)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.<init>(WMQMessageConsumer.java:486)
at com.ibm.msg.client.wmq.internal.WMQSession.createConsumer(WMQSession.java:918)
at com.ibm.msg.client.jms.internal.JmsSessionImpl.createConsumer(JmsSessionImpl.java:1032)
at com.ibm.msg.client.jms.internal.JmsSessionImpl.createConsumer(JmsSessionImpl.java:1116)
at com.ibm.msg.client.jms.internal.JmsContextImpl$SessionWrapper.createConsumer(JmsContextImpl.java:1991)
at com.ibm.msg.client.jms.internal.JmsContextImpl.createConsumer(JmsContextImpl.java:403)
是否需要更改用户名的传递方式?
任何帮助是极大的赞赏。
谢谢!!
下一行表示您提供的用户名和密码将在MQCSP结构中发送。
mqConnFactory.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
进程的用户 运行 将在 MQCD
RemoteUser
字段中发送。事实上,您的队列管理器根据进程所在的用户拒绝连接 运行 意味着它没有对您进行身份验证,而是让您声明用户名。
如果队列管理器是受支持的 MQ 版本,则管理员可以将其配置为打开 CONNAUTH 并要求您发送有效的用户名和密码。如果它已经配置为需要 CONNAUTH,那么他们需要确保设置 ADOPTCTX(YES)
让 MQ 使用经过身份验证的用户名进行权限检查。
MQ 7.1 不支持 CONNAUTH,并且不是 IBM 当前支持的版本。在该版本上进行身份验证的选项是:
- 使用队列管理器映射到通道上的 MCAUSER 或通过 CHLAUTH SSLPEERMAP 规则的客户端证书。
- 使用安全出口。
如果 MQ 管理员真的不关心对您的应用程序进行身份验证,他们可以
- 在频道上硬编码 MCAUSER
- 使用 CHLAUTH USERMAP 规则将
wljay
映射到 MQUser
。
我正在使用 https://github.com/ibm-messaging/kafka-connect-mq-source
项目来构建连接器以将数据从 IBM MQ 提取到 Kafka 主题。
我看到一个问题,其中提供的 used-id
被修改为 system user
并且身份验证失败并出现以下错误:
MQ 管理员报告说我提供了不同的用户 ID。
我已配置为发送 MQUser
作为用户标识(我正在 linux 服务器上执行此连接器)。但是到了MQ时,userid被修改为wljay
(也就是我在服务器上登录的用户)
ERROR MQ error: CompCode 2, Reason 2035 MQRC_NOT_AUTHORIZED
(com.ibm.eventstreams.connect.mqsource.JMSReader:413)
INFO Polling for records
(com.ibm.eventstreams.connect.mqsource.MQSourceTask:120)
ERROR JMS exception {} (com.ibm.eventstreams.connect.mqsource.JMSReader:362)
com.ibm.msg.client.jms.DetailedJMSSecurityRuntimeException: JMSWMQ2008: Failed to open MQ queue 'LOC.E.KAFKA.QUEUE'.
JMS attempted to perform an MQOPEN, but IBM MQ reported an error.
Use the linked exception to determine the cause of this error. Check that the specified queue and queue manager are defined correctly.
at com.ibm.msg.client.jms.DetailedJMSSecurityException.getUnchecked(DetailedJMSSecurityException.java:270)
at com.ibm.msg.client.jms.internal.JmsErrorUtils.convertJMSException(JmsErrorUtils.java:173)
at com.ibm.msg.client.jms.internal.JmsContextImpl.createConsumer(JmsContextImpl.java:416)
at com.ibm.eventstreams.connect.mqsource.JMSReader.connectInternal(JMSReader.java:342)
at com.ibm.eventstreams.connect.mqsource.JMSReader.receive(JMSReader.java:225)
at com.ibm.eventstreams.connect.mqsource.MQSourceTask.poll(MQSourceTask.java:124)
at org.apache.kafka.connect.runtime.WorkerSourceTask.poll(WorkerSourceTask.java:244)
at org.apache.kafka.connect.runtime.WorkerSourceTask.execute(WorkerSourceTask.java:220)
at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:175)
at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:219)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at java.lang.Thread.run(Thread.java:748)
Caused by: com.ibm.mq.MQException: JMSCMQ0001: IBM MQ call failed with compcode '2' ('MQCC_FAILED') reason '2035' ('MQRC_NOT_AUTHORIZED').
at com.ibm.msg.client.wmq.common.internal.Reason.createException(Reason.java:203)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:222)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.checkJmqiCallSuccess(WMQMessageConsumer.java:156)
at com.ibm.msg.client.wmq.internal.WMQConsumerShadow.initialize(WMQConsumerShadow.java:1176)
at com.ibm.msg.client.wmq.internal.WMQSyncConsumerShadow.initialize(WMQSyncConsumerShadow.java:133)
at com.ibm.msg.client.wmq.internal.WMQMessageConsumer.<init>(WMQMessageConsumer.java:486)
at com.ibm.msg.client.wmq.internal.WMQSession.createConsumer(WMQSession.java:918)
at com.ibm.msg.client.jms.internal.JmsSessionImpl.createConsumer(JmsSessionImpl.java:1032)
at com.ibm.msg.client.jms.internal.JmsSessionImpl.createConsumer(JmsSessionImpl.java:1116)
at com.ibm.msg.client.jms.internal.JmsContextImpl$SessionWrapper.createConsumer(JmsContextImpl.java:1991)
at com.ibm.msg.client.jms.internal.JmsContextImpl.createConsumer(JmsContextImpl.java:403)
是否需要更改用户名的传递方式? 任何帮助是极大的赞赏。 谢谢!!
下一行表示您提供的用户名和密码将在MQCSP结构中发送。
mqConnFactory.setBooleanProperty(WMQConstants.USER_AUTHENTICATION_MQCSP, true);
进程的用户 运行 将在 MQCD
RemoteUser
字段中发送。事实上,您的队列管理器根据进程所在的用户拒绝连接 运行 意味着它没有对您进行身份验证,而是让您声明用户名。
如果队列管理器是受支持的 MQ 版本,则管理员可以将其配置为打开 CONNAUTH 并要求您发送有效的用户名和密码。如果它已经配置为需要 CONNAUTH,那么他们需要确保设置 ADOPTCTX(YES)
让 MQ 使用经过身份验证的用户名进行权限检查。
MQ 7.1 不支持 CONNAUTH,并且不是 IBM 当前支持的版本。在该版本上进行身份验证的选项是:
- 使用队列管理器映射到通道上的 MCAUSER 或通过 CHLAUTH SSLPEERMAP 规则的客户端证书。
- 使用安全出口。
如果 MQ 管理员真的不关心对您的应用程序进行身份验证,他们可以
- 在频道上硬编码 MCAUSER
- 使用 CHLAUTH USERMAP 规则将
wljay
映射到MQUser
。