2011-06-29 57 views
4

有大量的在线建议使用.net System.Messaging.MessageQueue SetPermissions方法以编程方式设置MSMQ权限。但是我找不到任何system.messaging属性,可以让我读取当前在现有队列上配置的权限。如何以编程方式读取MSMQ队列上的权限?

我想写一个PowerShell审计脚本来评估几十台机器配置,如果我无法获得配置的队列权限,它几乎完全没用。

我打开的建议命令行选项,没有发现任何提到在stackoverflow。 Yoel的MSMQ WMI提供程序不公开必要的信息,并且据我所知,没有提供给MSMQ的命令行可以帮助你。

不能相信这是没有人解决的问题。微软的另一个企业产品缺少基本的安全功能(验证)。

使用powershell进行审计时,会更喜欢内置或.NET框架解决方案,但如果需要,可以通过任何必要的方式获取信息(CLI)。

回答

2

您可能会被卡住使用P/Invoke to call MQGetQueueSecurity。 IIRC COM接口也不支持读取队列权限。

+0

感谢您的信息,我想如果可能的话,以避免DLL调用。而且,代码只能得到二进制安全描述符,如果我通过powershell解析了队列lqs文件,这实际上也是可用的。我想下一个问题是如何获得安全主体,权限等呢? 例如:'[属性] 标签=专用$ \ testtran 类型= 00000000-0000-0000-0000-000000000000 QUEUENAME = \私人$ \ testtran杂志= 00限额= 4294967295 安全= 01000780b0000000cc000000000000001400000002009c00050000000000140004000000010100000000000507000000000024003f000f00010500000000000 ...' – JorgeSandoval

+0

我没有想到这一点(所以我可能会半翘),但我想你会想要使用[System.Security.AccessControl](http://msdn.microsoft.com/en-us/library/ ms229742.aspx)命名空间剥离访问控制列表。把它变成一个字节数组,你至少应该能够创建一个[RawAcl](http://msdn.microsoft.com/en-us/library/system.security.accesscontrol.rawacl.aspx)。甚至可以将字节数组变成更有用的东西。 –

+0

太糟糕了我不能指望所有的盒子有Windows Vista加...从Vista的WMI有一个安全描述符类,可以读取二进制安全描述符,并吐出win32_ACE数组,其中包含几乎所有(它不清楚,如果它的工作原理对于MSMQ SD,将需要尝试它)。 http://msdn.microsoft.com/en-us/library/aa394577(v=vs.85).aspx#the_role_of_security_descriptors – JorgeSandoval

2

我有同样的问题,并采取了这里建议的一些建议。我做了一个小型的c#项目,它使用p/invoke获取给定队列的用户权限。

请随意使用或作出贡献:

https://github.com/jlevitt/MSMQSecurity

相关问题