MSMQ拒绝访问错误

调用MSMQ的时候出现调用错误,拿出 MSMQTracer 测试 出现"拒绝访问"的错误,

微软的说法是:

当您尝试查看 Mobile Information Server 队列在 Microsoft 消息队列 (MSMQ) 创建的安装 Microsoft Mobile Information Server 后,您将收到以下错误信息:

错误: 访问被拒绝。
出现此问题的原因当前登录的用户必须是 Microsoft Mobility 管理员组查看 MSMQ 队列的成员。
将用户添加到 Microsoft 移动管理员组 Active Directory Users 和计算机中。

用户必须注销并登录后 (如果当前登录) 以生成一个新的访问令牌包含此新组。
郁闷!~~~~~~ 

查看权限,发现MSMQ的安全里面 有个 ANONYMOUS LOGON 的账户,没有赋权限, 

把ANONYMOUS LOGON 的账户给上 权限 就OK.

MSMQTracer 下载:

MSMQTracer

另外一种办法:

消息队列安全概述

安全概述

消息队列利用 Windows Server 2003 家族操作系统的多种内置的安全功能。具体说来,消息队列使用访问控制、消息身份验证、加密及安全审核。在 Message Queuing 3.0 中,除了支持 40 位加密之外,还支持 128 位加密。通过管理对象的安全属性,可以设置权限、指派所有权以及监视用户访问。

访问控制用来限制用户访问 Active Directory 中的消息队列对象,并通过向对象指派安全描述符实现这一工作。消息队列对象包括 MsmqServices、msmq、队列、路由链接和 MSMQ 设置对象。本地计算机的 msmq 对象也称作 MSMQ 配置对象(例如,在该对象的特定权限名称中以及在控制委派向导中)。安全描述符列出允许或拒绝访问对象的用户和组,以及指派给这些用户和组的特定权限。有关详细信息,请参阅 消息队列的访问控制

通过使用 Kerberos V5 安全协议(在 Windows Server 2003 计算机之间)或服务器验证(以便与 Windows NT 4.0 上运行的 MSMQ 1.0 兼容),执行对 Active Directory 和其他目录服务的安全查询,在这些目录服务中,客户端和服务器是联机的且可以相互通话。

消息身份验证(验证向接收方发送消息的发送方的身份)是使用证书来实现的。对消息的身份验证是采用异步方式进行的,无需发送方和接收方相互通讯。有关详细信息,请参阅 消息队列的验证

使用公钥/私钥(不对称)和密钥(对称)算法实现加密。消息队列应用程序使用“加密”功能对消息队列计算机之间发送的消息进行加密。有关详细信息,请参阅 消息队列的加密

安全审核用于记录试图访问 Active Directory 中的消息队列对象的用户。对象的安全描述符指定为该对象所要审核的多种安全事件。有关详细信息,请参阅 审核消息队列对象

消息安全性

消息队列可确保从源计算机向目标计算机发送的消息的安全性。在访问队列时,应用程序可执行“本地读取”或“远程读取”。当接收应用程序访问驻留在同一计算机上的目标队列时,执行本地读取。在这种情况下,可以保证消息安全性。

当从另一台计算机访问队列所在计算机上的队列内容时,执行远程读取。对于远程读取,Message Queuing 3.0 在默认情况下使用加密的 RPC。当 Windows Server 2003 家族客户端计算机对 Windows Server 2003 家族计算机、Windows 2000 或 Windows NT 4.0 上运行的消息队列计算机执行远程读取时,可以使用此功能。请注意,在不能使用加密 RPC 的情况下(例如,当工作组计算机为远程读取进程的一部分时),消息将以明文形式传递到远程计算机,并不能保证消息安全性。只有拥有从队列读取消息的必要访问权限的用户才能读取到达目标队列的明文消息。

安全的远程读取

Windows Server 2003 家族计算机上的 Message Queuing 3.0 提供了新的安全远程读取接口,增强了运行在早期版本的 Windows 操作系统上的消息队列所使用的旧式远程读取接口的安全性,使消息队列服务器能够以更安全的方式展示远程读取功能。

安装消息队列之后,Windows Server 2003 家族计算机上的 Message Queuing 3.0 将同时侦听旧式远程读取接口和新的安全远程读取接口,并应用以下默认设置:

  • 在 Windows Server 2003 家族计算机上与 Message Queuing 3.0 服务器处于相同林中的 Message Queuing 3.0 客户端将使用带有加密通道的安全远程读取接口。

  • 在非信任域中 Windows Server 2003 家族计算机上的 Message Queuing 3.0 跨林客户端将使用安全远程读取接口。默认情况下,Message Queuing 3.0 服务器要求域客户端来建立加密通道,而这样的通道不能在非信任域之间建立。因此来自此类客户端的远程读取请求将被拒绝。要修改此默认行为并允许消息队列服务器接受未建立加密通道的域客户端,请在注册表中创建 DWORD 值 Security\NewRemoteReadServerAllowNoneSecurityClient 并将其设置为 1。创建此注册表项将使非信任域中的客户端使用匿名登录凭据进行验证。创建此注册表项后,必须对匿名登录帐户授予“扫视”或“接收”权限,以满足来自非信任域的客户端的远程读取请求。实现此注册表项并对该匿名登录帐户授予权限后,消息队列服务器将接受来自每个人的“扫视”和“接收”请求,而不进行身份验证检查。因此,只能在完全必要时实施这些更改。

  • Windows Server 2003 家族计算机上的 Message Queuing 3.0 工作组客户端将使用安全远程读取接口。工作组客户端不能建立远程读取的加密通道,默认情况下,消息队列服务器使用匿名登录凭据接受非加密通道上的工作组客户端。在这种情况下,必须为该匿名登录帐户授予“扫视”或“接收”权限,以满足来自工作组客户端的远程读取请求。要修改此默认行为以使 Message Queuing 3.0 服务器拒绝工作组客户端,可在注册表中创建 DWORD 值 Security\NewRemoteReadServerDenyWorkgroupClient,并将其设置为 1。

  • MSMQ 1.0 和 MSMQ 2.0 客户端,以及 Windows XP 计算机上的 Message Queuing 3.0 客户端将使用旧式远程读取接口。如果您使 Message Queuing 3.0 服务器只使用安全远程读取接口,那么计算机就不侦听旧式远程读取接口,因此不支持来自这些客户端的远程读取。

您可以在“计算机管理”中“消息队列”属性的“服务器安全性”选项卡中,使 Message Queuing 3.0 服务器只使用安全的远程读取模式。在安全的远程读取模式中,计算机只侦听新的安全远程读取接口,而不侦听旧的远程读取接口。这种模式导致的结果是:只有 Windows Server 2003 家族计算机上的 Message Queuing 3.0 服务器才能从计算机上的队列中远程接收消息,不支持从 MSMQ 1.0 客户端、MSMQ 2.0 客户端和在 Windows XP 计算机上运行的 Message Queuing 3.0 客户端进行的远程读取。有关让服务器只使用新的安全模式的说明,请参阅 启用安全的远程读取

原文来自:http://www.51crazy.net/Article/146.aspx

原文地址:https://www.cnblogs.com/Kakasi/p/2180929.html