| 发表于:2007-07-28 17:14:09 楼主 |
我的产品是一个服务器程序。 用户登陆服务器,发出请求。服务器根据用户请求,对mq作相应的操作。产品要求使用用户(登陆并发出请求的)的userid 进行mq权限认证, 而不是启动服务器的userid(启动服务器的用户必然属于mqm组)。 所以,我在打开queue时, 使用了“mqoo_alternate_user_authority”, 并将‘alternateuserid'设置为登陆用户的用户名。 最近我们准备支持 mq cluster。在进行单元测试时,发现当我使用一个无效用户时,我仍然能够成功打开remote cluster queue,并发送消息。这与我们的预期不符。 不知有哪位大侠知道为什么? 或者指出我程序中的漏洞。 非常感谢。 以下是我的环境: queue manager 'bravado_mscai ' 加入了 cluster ‘inv_mscai '. 在这个cluster中 存在一个remote cluster queue "mscaiq "。 该队列不在 queue manager 'bravado_mscai '. 我的服务器程序连接到 'bravado_mscai ', 将 'alternateuserid ' 设置为一根本不存在的用户 'sa ', 使用option 'mqoo_alternate_user_authority ', 成功打开了 remote cluster queue 'mscaiq '。 在测试中,所有的security设置我都是使用默认的。public 用户组不拥有任何mq 权限。如果我用 'sa '去打开cluster xmitq : system.cluster.transmit.queue, 必然失败(这与我的预期相符)。 以下是我的相关代码: > > > > > > > > > > > > > > > > > > > mqcd clientconn = {mqcd_client_conn_default}; mqod mqod = {mqod_default}; mqhconn hconn; /* handle to mq connection */ ..... mqconnx(qmname, &connect_options, &hconn, &compcode, &connreason); ..... mqlong o_options; o_options = mqoo_fail_if_quiescing ¦ mqoo_inquire; /* set remote cluster queue 'masterq ' to mqod '*/ strncpy(mqod.objectname, qname, mq_q_name_length); o_options ¦= mqoo_output; o_options ¦= mqoo_alternate_user_authority; /*set a invalid user 'sa ' */ strncpy(mqod.alternateuserid, "sa ", 3); /* open the remote cluster queue*/ mqopen(hconn, &mqod, o_options, &hobj, &compcode, &connreason); ... /*close it */ o_options = mqco_none; mqclose(hconn, &hobj,o_options,&compcode,&connreason); ... > > > > > > > > > > > > > > > > > > > > |
|
|
|
|