Dom*_*nik 6 c# permissions msmq
我试图以编程方式Message Queues在Windows 2003x64/2008R2服务器上创建几个.创建队列时,Windows会自动将默认权限应用于队列.
对于MSMQ 4,默认情况下会添加以下用户
当我使用队列设置权限时MessageQueue.SetPermissions(),指定的AccessControlList内容仅附加到默认安全权限.
是否有任何方法可以删除或覆盖默认权限?在 这篇MSDN文章的底部,它说明了这一点
但是,您不能自定义默认值,因为它们是硬编码的.
我知道队列的设置保存在位于的文件中C:\Windows\System32\msmq\storage\lqs.在此文件中有一个Security属性,表示队列的权限.可以选择编辑此密钥吗?但是,这样做对我来说似乎很奇怪.
我正在寻找一种正确的方法来指定我自己的方法来AccessControlList覆盖队列的默认安全权限.无论是在创建时还是之后.
任何帮助表示赞赏,
谢谢.
Mac*_*iej 12
如果您无法删除或撤消对这些默认组的权限,则始终可以尝试拒绝对这些组的权限.拒绝优先于允许.此代码有效:
MessageQueue queue = new MessageQueue(".\\Private$\\QueueName");
queue.SetPermissions("Everyone", MessageQueueAccessRights.ReceiveMessage,
AccessControlEntryType.Deny);
Run Code Online (Sandbox Code Playgroud)
撤销权限(AccessControlEntryType.Revoke)也应该有效.也许您的代码中存在错误.适用于我的机器.
文章说:
但是,您不能自定义默认值,因为它们是硬编码的.
并且这意味着您无法更改队列创建期间给出的权限,但您可以在之后更改它们.
编辑:让"Everyone"独立于OS语言:如何让"Everyone"的IdentityReference在本地化系统上创建MutexAccessRule?
小智 6
我和ACL有同样的问题.当我切换到SetPermissions()方法时,事情运行得更好.
以下代码适用于我:
queue.SetPermissions(
"Everyone",
MessageQueueAccessRights.FullControl,
AccessControlEntryType.Allow);
queue.SetPermissions(
"ANONYMOUS LOGON",
MessageQueueAccessRights.FullControl,
AccessControlEntryType.Allow);
Run Code Online (Sandbox Code Playgroud)