c# - 在 C# 中创建新消息队列 (MSMQ) 时设置默认权限

标签 c# permissions msmq

我正在尝试以编程方式在 Windows 2003x64/2008R2 服务器上创建多个消息队列。 创建队列时,Windows 会自动将默认权限应用到队列。

对于MSMQ 4,默认添加以下用户

  • 所有人
  • 队列创建者
  • 匿名登录

当我使用 MessageQueue.SetPermissions() 设置队列的权限时,指定的 AccessControlList 仅附加到默认安全权限。

有什么方法可以删除或覆盖默认权限? 在 this MSDN Article在底部,它声明

You can't, though, customise the defaults as they are hard-coded.

我知道队列的设置保存在一个文件中,该文件位于 C:\Windows\System32\msmq\storage\lqs。在此文件中,有一个 Security 属性代表队列的权限。可以编辑这个键吗?然而,这样做对我来说似乎有点奇怪。

我正在寻找一种适当的方法来指定我自己的 AccessControlList 以覆盖队列的默认安全权限。在创建时或之后。

感谢任何帮助,

谢谢。

最佳答案

如果您无法删除或撤销对这些默认组的权限,您始终可以尝试拒绝对它们的权限。拒绝优先于允许。此代码有效:

MessageQueue queue = new MessageQueue(".\\Private$\\QueueName");
queue.SetPermissions("Everyone", MessageQueueAccessRights.ReceiveMessage,
        AccessControlEntryType.Deny);

撤销权限 (AccessControlEntryType.Revoke) 也应该有效。也许你的代码有错误。在我的机器上工作。

文章说:

You can't, though, customise the defaults as they are hard-coded.

这意味着您不能更改队列创建期间授予的权限,但您可以在之后更改它们。

编辑:让“Everyone”独立于操作系统语言:How to get the IdentityReference for "Everyone" to create MutexAccessRule on localized systems?

关于c# - 在 C# 中创建新消息队列 (MSMQ) 时设置默认权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10426407/

相关文章:

c# - 如何在C#中用指针编写C结构体

c# - 在模型上添加动态只读属性

java - 如何从 J2ME 应用程序访问通话记录?

java - 以编程方式查询 LDAP 权限

c# - 使用 C# 安装 Msmq

c# - dotNet 十进制类型是否容易受到二进制比较错误的影响?

c# - 两个日历扩展器?

iOS权限提示问题

.net - WCF MSMQ 的观察者模式

nservicebus - 在 CQRS 系统中,我应该如何向用户表明他们的请求已收到?