我正在尝试以编程方式在 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/