-

- 加为好友
- 发送私信
- 在线聊天
|
| 发表于: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); ... > > > > > > > > > > > > > > > > > > > > |
|
|
|
100
修改
删除
举报
引用
回复
| |