为其他用户创建的专用队列设置 MSMQ 权限

Posted

技术标签:

【中文标题】为其他用户创建的专用队列设置 MSMQ 权限【英文标题】:Setting MSMQ permissions for a private queue created by a different user 【发布时间】:2011-06-03 23:28:42 【问题描述】:

以前在工作中使用我的 PC 的人设置了一个我需要访问的私有 MSMQ。他们已经离开了银行,但权限仍然存在,我无法访问队列或授予自己编辑权限以删除限制。

我现在是这台机器的管理员,所以我假设我有一些方法可以改变事情。一直在搜索高低,但我发现的大部分内容都与通过脚本做事有关。

任何帮助表示赞赏,

谢谢

【问题讨论】:

【参考方案1】:

右键单击您的队列 -> 属性 -> 安全 -> 转到高级并修改组的权限。

【讨论】:

我无法应用任何东西,所以我没有想到去高级设置!原来我只需要获取队列的所有权,谢谢! 每当我尝试应用我所做的任何更改时,都会说我无权进行更改,仅此而已。将所有权更改给我解决了这个问题。【参考方案2】:

如果所有其他方法都失败了,对于手动过程:

    停止 MSMQ 服务(服务 -> 消息队列) 打开 C:\WINDOWS\system32\msmq\storage\lqs 文件夹 在此文件夹中找到描述具有“良好”安全权限的队列的配置文件。您需要使用文本编辑器依次打开每个文件,以确定它与哪个队列相关。 打开正确的文件后,找到文件中以 Security=.... 开头的行 将整行复制到剪贴板(注意自动换行,这一行会很长) 在此文件夹中找到描述您的问题队列的配置文件 在文本编辑器中打开此文件。 用剪贴板的内容覆盖此文件中的 Security=... 行 保存修改后的文件 启动MSMQ服务;将获得新的权限。

干杯

约翰·布雷克韦尔

【讨论】:

我在其他地方看到了这个解决方案,但是我的 ...\lqs 文件夹只有一堆带有长数字名称和数字/字母扩展名的文件,我不想开始搞乱我没有做的事情不明白。也许我的电脑上的某些东西配置不同,所以我不能使用这种方法? 文件名是 MSMQ 快速查找的方式。您只需要找到包含所需队列名称的文本文件。 (见support.microsoft.com/kb/174307) 如果您没有任何具有“良好”安全权限的队列,则只需创建一个具有所需安全权限的新队列。并按照@JohnBreakwell Breakwell 的步骤使用这个新队列。注意:完成后不要忘记删除新的虚拟队列。 :) 您好,来自 2011 年的约翰!我来自八年后的未来,只想让你知道,此时此刻,你还在帮助别人!非常感谢! 我是在这个答案首次提供 10 年后我没有支持它。【参考方案3】:

首先,将队列的所有权更改为Administrators组;然后为自己分配所需的权限。

【讨论】:

我不明白为什么这个答案被否决了。根据 op 对接受的答案的 cmets,这基本上是他为解决问题所做的。 @Elezar 已经晚了四年,并且与四年前的现有答案相比并没有增加任何内容。 考虑到列出的步骤仍然完全相关,我不明白它是如何“迟到”的。它确实在答案上添加了一些内容,因为它指定了更改所有权。其他答案都没有提到这一点。如果您不是所有者,则接受的答案在大多数情况下将不起作用(事实上,正如 OP 在评论中提到的那样,他确实必须首先更改所有权才能获得该答案工作),对于能够更改所有权的人来说,这可能比 John Breakwell 提供的手动方法更简单。 我的帖子是“不得已而为之”的方法。【参考方案4】:

允许修改不允许这样做的用户的权限的最简单方法是以管理员身份运行 PowerShell 并运行命令:

Get-MsmqQueue -Name "MyQueue" -QueueType Private | 
  Set-MsmqQueueAcl -UserName "Everyone" -Allow FullControl

这将允许您在 Windows 用户界面中编辑权限。

【讨论】:

以上是关于为其他用户创建的专用队列设置 MSMQ 权限的主要内容,如果未能解决你的问题,请参考以下文章

MSMQ - 发送到远程专用队列啥都不做

关于访问MSMQ远端私有队列的一点经验

队列不存在或您没有足够的权限来执行该操作。通过 MSMQ 发送消息时出现异常

在脚本中设置 MSMQ 队列的权限

MSMQ学习笔记二——创建Message Queue队列

使用 ReceiveById 的糟糕的 MSMQ 性能