NServiceBus & MSMQ: Как изменить разрешения по умолчанию для очереди? - PullRequest
1 голос
/ 21 мая 2010

Моя команда в нашей первой попытке использовать NServiceBus (v2.0), используя MSMQ в качестве резервного хранилища. Мы застряли в разрешениях очереди.

Мы используем его в приложении веб-форм, где учетная запись пользователя, под которым работает веб-сайт, не является администратором на компьютере.

Когда NServiceBus создает очередь MSMQ, он предоставляет локальному администратору полный контроль над правами, а локальным всем и анонимным группам - разрешения на отправку сообщений.

Но потом, как часть инициализации очереди, NServiceBus пытается прочитать все свои сообщения. Вот где мы сталкиваемся с ошибкой прав доступа. Поскольку веб-сайт не работает от имени администратора, читать сообщения запрещено.

Как другие люди имеют дело с этим? Ваши приложения работают как администраторы? Или вы сначала создаете очередь MSMQ в своем коде, предоставляя ей необходимые разрешения, чтобы NServiceBus не создавал ее? Или нам не хватает конфигурации? Или мы, вероятно, пишем наш код, который неправильно использует NServiceBus для запуска в этом?

Ответы [ 4 ]

2 голосов
/ 21 мая 2010

Это сообщение в блоге должно помочь:

http://blogs.msdn.com/johnbreakwell/archive/2009/08/03/default-msmq-queue-permissions-have-changed-in-msmq-4-0.aspx

Особенно:

"Если вы хотите установить разрешения при создании очередей, вы всегда можете создать желаемоедескриптор безопасности и передать его в параметре pSecurityDescriptor MQCreateQueue . Однако нельзя настроить значения по умолчанию, так как они жестко заданы. "

Cheers
John Breakwell (ex-MSFT)

1 голос
/ 25 мая 2010

Мы создаем очереди в подклассе Installer и выполняем его как часть установки msi. Владение очередью - это ярлык, но соответствующие разрешения можно установить через AccessControlList:

MessageQueue queue = MessageQueue.Create(queueName, true);
AccessControlList permissions = new AccessControlList();
permissions.Add(new MessageQueueAccessControlEntry(
    new Trustee(this.serviceProcessInstaller.Username),
    MessageQueueAccessRights.FullControl, 
    AccessControlEntryType.Set));
// Add additional permissions for admins & message-sending accounts
queue.SetPermissions(permissions);

Мне кажется, что функция автоматического создания очереди NServiceBus лучше подходит для разработки, а не для развертывания.

0 голосов
/ 02 июня 2016

Для полного владения созданием очереди MSMQ вы можете отключить установщики и затем обработать создание очередей самостоятельно

0 голосов
/ 21 мая 2010

смените владельца очереди, это единственное, что у меня сработало в аналогичной ситуации

...