Проблема с разрешениями пользовательских маркеров производительности WMI внутри приложения IIS7
У меня проблемы с получением разрешений, чтобы мое приложение (запущенное в IIS7 AppPool) могло удалить / добавить категории счетчиков производительности и их данные. У меня есть такой код:
if (!PerformanceCounterCategory.Exists(CategoryName))
{
var counters = new CounterCreationDataCollection();
var opsIn = new CounterCreationData
{
CounterName = "Test Counter",
CounterHelp = "Test Counter Help",
CounterType = PerformanceCounterType.RateOfCountsPerSecond32
};
counters.Add(opsIn);
PerformanceCounterCategory.Create(CategoryName, "Service Layer Instrumentation",
PerformanceCounterCategoryType.SingleInstance,
counters);
}
Цель состоит в том, чтобы создать счетчики производительности в системе, в которой они еще не созданы, поэтому я не привязан к поведению статического установщика (я хочу иметь возможность изменять счетчики без особых хлопот). Пока, когда это работает, это работает хорошо.
Когда я запускаю этот код в исполняемом файле от имени администратора, проблем не возникает. Тем не менее, когда я запускаю его внутри службы IIS, AppPool не имеет правильных разрешений для выполнения изменений категории. Я точно знаю, что можно правильно настроить разрешения WMI, потому что я делал это однажды для демонстрации с тестовым сервером... но это было несколько месяцев назад, я устал, и это было в последнюю минуту. Все это размытие. Я не могу воспроизвести свои результаты сейчас, когда возвращаюсь, пытаясь формализовать процесс установки, чтобы включить необходимые изменения безопасности.
Google мало чем полезен, и я отчетливо помню, как нужно было собирать инструкции из нескольких страниц, прежде чем все заработало. У кого-нибудь есть рекомендации по выполнению полных инструкций по включению редактирования категории счетчика производительности для пула приложений IIS?
3 ответа
Если вы не хотите запускать код счетчика производительности в отдельном процессе, вы можете выполнить следующие действия, повысив разрешения.
http://msdn.microsoft.com/en-us/library/bd20x32d(v=vs.71).aspx
Приведенная выше ссылка объясняет счетчики производительности в приложениях ASP.NET, а также то, что ASP.NET по умолчанию не имеет разрешения на создание пользовательских счетчиков производительности и не может читать счетчики производительности. Ниже приводится цитата из статьи.
Если вы используете компонент PerformanceCounter в приложении ASP.NET, настройки учетной записи пользователя ASPNET по умолчанию ограничивают доступ к счетчикам производительности. Учетная запись пользователя ASPNET по умолчанию может записывать, но не считывать данные со счетчиков производительности, и не может создавать новые категории. Вы можете использовать олицетворение с учетной записью ASPNET, чтобы разрешить создание новых категорий. Идентификация олицетворения должна иметь достаточные привилегии для создания категорий. Если вашему приложению нужны счетчики производительности, которые можно указать перед развертыванием, они могут быть созданы проектом развертывания. Для получения дополнительной информации см. Безопасность веб-приложений ASP.NET.
Вы можете выдавать себя за asp, чтобы запускать его как отдельную учетную запись, которой вы также можете предоставить привилегии. Пример кода из статьи об олицетворении ASP.NET приведен ниже, конечно, вы также можете зашифровать это имя пользователя и пароль. В статье рассказывается, как зашифровать имя пользователя и пароль.
http://msdn.microsoft.com/en-us/library/aa719560(v=vs.71).aspx
Изменять категории счетчиков производительности можно только с правами администратора.
Смотрите: Счетчик производительности выдает исключение SecurityException
Документация MSDN включает дополнительную причину для их создания во время установки:
Настоятельно рекомендуется создавать новые категории счетчиков производительности во время установки приложения, а не во время его выполнения. Это позволяет операционной системе обновить список зарегистрированных категорий счетчиков производительности. Если список не был обновлен, попытка использовать категорию не удастся.
Вы должны создать свои счетчики производительности вне ASP.NET. Создание категории счетчика производительности требует разрешений, которых нет у учетной записи AppPoolIdentity по умолчанию. Учетная запись ASP.NET может считывать пользовательские счетчики производительности после их создания. (Не запускайте ASP.NET как SYSTEM или как учетную запись администратора, потому что это создает угрозу безопасности)
Вы можете создать свои счетчики в процессе установки.