您好我使用CSP结构在客户端应用程序上发送客户端ID,我的目标是根据此ID获取OAM授权的队列操作,而不是我的应用程序的进程ID跑下。我观察到的是:
显然,为什么在第三种情况下,用于授权的ID似乎是在MQSCP字段中发送的ID,而不是在第一种情况下?
除了使用MQSCP结构中的字段在MQCONNX调用的options参数中发送CLNTID之外,是否还需要设置任何内容?
环境是在Linux上运行的WMQ 7.5。
代码是:
MQCNO mqcno = {MQCNO_DEFAULT};
mqcno.Version = MQCNO_VERSION_5;
// Identification
if (mqpar->user != NULL) {
MQCSP sp = {MQCSP_DEFAULT};
sp.Version = MQCSP_CURRENT_VERSION;
sp.AuthenticationType = MQCSP_AUTH_USER_ID_AND_PWD;
sp.CSPUserIdPtr = mqpar->user;
sp.CSPUserIdLength = strlen(mqpar->user);
sp.CSPPasswordPtr = mqpar->pwd;
sp.CSPPasswordLength = strlen(mqpar->pwd);
mqcno.SecurityParmsPtr = &sp;
}
MQCONNX("",&mqcno,mgrd,retc,reasc);
感谢您的帮助。
从OP后续评论中添加额外信息。
编写此代码的目的不是验证连接,而是要获取OAM所做的授权检查,这取决于MQCSP中发送的用户,而不是客户端上的进程正在运行的用户ID。
我试图在Java WebSphere Application Server中实现配置连接工厂的相同效果,如果我没有错误,则根据身份验证别名在与管理器的连接上传输用户ID指定连接工厂。
答案 0 :(得分:2)
您在队列管理器方面对MQCSP实际执行任何操作有什么作用?由于您只是V7.5,因此队列管理器没有内置(在V8中),因此如果您没有安全性退出,则会忽略MQCSP。
实际上'忽略'不太准确,我认为内置行为检查MQCSP用户和run-as用户ID是否相同。但除非您有安全出口或使用MQ V8,否则不会检查密码。
OP提供的更多信息
在这方面,'p'客户端与Java客户端的工作方式不同。 Java客户端使用MQEnvironment集用户标识作为运行用户标识。从Java无法获取客户端进程ID的历史异常。我认为你有三个选择: -
MCAUSER
。MCAUSER