【问题标题】:No permission to access a private MSMQ无权访问私有 MSMQ
【发布时间】:2010-10-21 08:04:53
【问题描述】:

在 XP 机器上,有一个由 .net 服务创建的私有消息队列。 当我想在 VB6 应用程序中访问这个私有队列时,我不断收到“访问被拒绝”错误。 所以这似乎是一个安全问题,只是我不明白为什么即使我以管理员身份登录我仍然 无法访问在同一台机器上创建的队列。 还有什么我需要考虑的吗?

关于我如何在 VB6 中使用队列的示例

Public msgQueue As MSMQQueue

Private Sub OpenQueue()

    Dim MQ As New MSMQQueueInfo
        MQ .PathName = ".\Private$\incommingQueue"

    Set msgQueue = MQ.Open(MQ_RECEIVE_ACCESS, MQ_DENY_NONE)

End Sub

【问题讨论】:

  • 您检查队列的安全性了吗? ACL 位于队列属性中,看起来就像文件夹属性。
  • 如果我尝试修改队列的属性,我只会收到相同的消息“访问被拒绝”。

标签: vb6 msmq


【解决方案1】:

此处发布的解决方案似乎有点骇人听闻。也许这对于 Windows XP 是必要的。我在使用 Windows 7 时遇到过类似的情况,并使用了不同的方法来解决这个问题。

情况:

  • 程序由创建私有事务队列的 C# 代码组成
  • 程序作为 Windows 服务运行,在本地系统帐户上运行。
  • 服务运行时,会创建私有队列,并以本地系统帐户作为所有者。
  • 即使我是管理员,我也无法检查队列中的消息。

解决方案(适用于 Windows 7):

  1. 运行 compmgmt.msc
  2. 打开“服务和应用程序”
  3. 打开“消息队列”
  4. 打开“私有队列”
  5. 右键单击新创建的队列
  6. 点击“属性”
  7. 选择“安全”标签
  8. 点击“高级”
  9. 选择“所有者”标签
  10. 选择“管理员”
  11. 选择“权限”标签
  12. 点击“添加”
  13. 输入您的帐户名称(例如“管理员”)
  14. 点击“检查姓名”
  15. 点击“确定”
  16. 点击“确定”
  17. 点击“确定”

现在您可以访问队列中的消息,也可以根据需要清除队列。

【讨论】:

  • 我已验证此方法适用于 Windows Server 2003。很棒的工作。另一个修复看起来确实像一个 hack,而这个更容易完成。
  • 我必须在第 15 步和第 16 步之间单击“完全控制”复选框,但除此之外,是的,这适用于我的 Windows 7 机器,而且它比其他解决方案少得多。
  • 当队列由 Windows 服务创建时,这不起作用,因为对队列的访问被拒绝,这正是原始问题中描述的情况。
  • 这是更明显的方法,但在没有人授予队列“设置权限”权限的情况下不起作用,或者可能只有系统帐户或网络服务帐户具有该权限。如果是这种情况,则需要“破解”。
  • 我已验证此方法适用于 Windows Server 2008 R2 :) 谢谢
【解决方案2】:

如果 .NET 服务从私有队列的权限中删除了“Everyone”组,就会发生这种情况。您可以采取以下步骤来解决此问题:

  1. 停止 MSMQ 服务

  2. 打开文件夹C:\WINDOWS\system32\msmq\storage\lqs

  3. 在此文件夹中找到描述您的队列的文件 -- (incommingQueue)

  4. 使用记事本打开 lqs 文件以获得其他一些具有良好安全权限的私有队列。 (如果您没有任何其他私有队列,请创建一个)

  5. 找到文件中以Security=....开头的行

  6. 将整行复制到剪贴板(注意自动换行,这一行会很长)

  7. 在文本编辑器中打开问题队列的 lqs 文件

  8. 用剪贴板的内容覆盖此文件中的Security=...

  9. 保存修改后的lqs文件

  10. 启动 MSMQ 服务

您应该会发现问题队列现在与您在上面第 6 步中复制其安全设置的队列具有相同的权限。

【讨论】:

  • 这听起来像一个可怕的黑客攻击。 当然可以通过队列的属性来完成,如下面的答案所述。 stackoverflow.com/a/3138438/1158692
  • 用于查看队列属性的 UI 不可用,因为服务无法启动...这是因为我的一个队列处于不一致状态。这个hack是我唯一的出路。让我检查一下。
猜你喜欢
  • 2015-06-12
  • 2023-03-23
  • 1970-01-01
  • 1970-01-01
  • 2018-01-07
  • 2010-12-23
  • 2011-08-15
  • 2020-03-01
  • 2013-10-27
相关资源
最近更新 更多