2011-06-29 32 views
4

.net System.Messaging.MessageQueue SetPermissionsメソッドを使用してプログラムでMSMQアクセス許可を設定するためのオンライン提案が多数あります。しかし、私は既存のキューに現在設定されているパーミッションを読み取ることができるsystem.messagingプロパティを見つけることができません。プログラムでMSMQキューのアクセス許可を読み取る方法

私は数十台のマシン構成を取り込むためにpowershell監査スクリプトを作成しようとしています。キューの構成済みのアクセス権を取得できない場合はほぼ無駄です。

私はコマンドラインオプションの提案には開放されていますが、stackoverflowに記載されているものは見つかりませんでした。 YoelのMSMQ WMIプロバイダは必要な情報を公開しておらず、MSMQで提供されているコマンドラインがないとわかる限り、これを取得します。

これは誰も対処していないものと信じられません。マイクロソフトのもう1つのエンタープライズ製品で、基本的なセキュリティ機能(検証)が欠落しています。

監査にpowershellを使用すると、組み込みまたは.netフレームワークソリューションが好まれますが、必要に応じて必要な情報(CLI)を必要に応じて取得することができます。

答えて

2

P/Invoke to call MQGetQueueSecurityを使用している可能性があります。 IIRC COMインターフェイスには、キューのアクセス許可の読み取りもサポートされていません。

+0

おかげで、私は、可能な場合は、DLLの呼び出しを避けるためにしたいと思います。また、コードはバイナリのセキュリティ記述子を取得するだけです。実際には、powershellを使用してキューのlqsファイルを解析しても、実際に利用可能でした。私は次の質問は、セキュリティプリンシパル、アクセス許可などを取得する方法ですか? 例: '[プロパティ] ラベル=民間の$ \のtesttran タイプ= 00000000-0000-0000-0000-000000000000 QUEUENAME =ジャーナル= 00クォータ= 4294967295 セキュリティ= 01000780b0000000cc000000000000001400000002009c00050000000000140004000000010100000000000507000000000024003f000f00010500000000000 ...' – JorgeSandoval

+0

I testtran民間の$ \ \これを考えていないので(私はハーフコックされていることができます)が、私はあなたが[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

私は同じ問題を抱えていて、ここで示唆されているアドバイスをいくつか取りました。私はp/invokeを使って与えられたキューに対してユーザの権限を取得する小さなC#プロジェクトを作った。

使用して自由に感じるか、それに貢献してください:情報のため

https://github.com/jlevitt/MSMQSecurity

関連する問題