【发布时间】:2011-01-31 14:07:53
【问题描述】:
在 Win 2008 R2 机器上运行。
作为自动化我的应用程序安装过程的一部分,我创建了一个小型命令行实用程序,当调用它时会创建一个 MQ。由于我的部署是在工作组环境中,我正在设置创建的队列权限,以便所有人和匿名用户都可以完全控制队列。
我的代码是这样的
Try
Dim Q As MessageQueue = MessageQueue.Create(QueueName)
Console.WriteLine("Queue created successfully")
' Create an AccessControlList.
Dim list As New AccessControlList()
'Add the AccessControlEntry to the AccessControlList.
list.Add(New AccessControlEntry(New Trustee("Everyone"), GenericAccessRights.All, StandardAccessRights.All, AccessControlEntryType.Allow))
'Add the AccessControlEntry to the AccessControlList.
list.Add(New AccessControlEntry(New Trustee("ANONYMOUS LOGON"), GenericAccessRights.All, StandardAccessRights.All, AccessControlEntryType.Allow))
' Apply the AccessControlList to the queue.
Q.SetPermissions(list)
Catch ex As Exception
Console.WriteLine(String.Format("Unable to create queue {1}. {0}", ex, QueueName))
End Try
当我使用“.\Private$\QueueName”之类的队列名称运行它时,队列创建成功,如果我查看队列权限,一切似乎都正常(所有人和匿名都可以完全访问队列)。问题是权限看起来不错,但事实并非如此。当匿名用户尝试向队列发送(或读取)消息时,他会收到拒绝访问错误。如果在队列权限上我删除了所有人和匿名权限并重新创建它们,那么突然一切都按预期工作并且客户端可以发送消息。
进一步证明存在一些问题:如果我查看文件夹 c:\Windows\Sysnative\msmq\storage\lqs\ 上的队列设置文件的内容,我会看到这些权限
安全= 010007806800000084000000000000001400000002005400030000000000140024001f100101000000000001000000000000140004001f10010100000000000507000000000024003f000f0001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d501020000 P>
在删除并重新创建权限后,我得到了这些安全设置:
安全= 01000780680000008400000000000000140000000200540003000000000024003f000f0001050000000000051500000097fd4a8271ec5457708be3d5f4010000000014003f000f00010100000000000507000000000014003f000f0001010000000000010000000001050000000000051500000097fd4a8271ec5457708be3d5f401000001050000000000051500000097fd4a8271ec5457708be3d501020000 P>
在使用上述代码创建的每个队列上,安全设置就像我重新创建设置之前的第一个安全行,之后的第二个安全行。
我在这里错过了什么?
P.S 您可以在我就该主题发表的 MS 论坛帖子中阅读一位前 MSFT 员工对该安全令牌所做的一些分析 http://social.msdn.microsoft.com/Forums/en-US/msmq/thread/2f87fe8a-c452-432a-815d-05eeaf455514/
【问题讨论】:
-
我的代码包含建议答案的 cmets 中提到的两种方法。他们都没有工作。