Поделиться через


Безопасное предоставление событий

Вы можете запретить несанкционированным пользователям получать события, к которым у них не должно быть доступа. Поставщик событий может предоставлять экземпляры собственных классов событий аналогично тому, как поставщик системного реестра предоставляет такие классы, как RegistryKeyChangeEvent. Поставщик событий также может доставлять встроенные события, такие как __InstanceCreationEvent. Дополнительные сведения см. в разделе Написание поставщика событий.

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

  • Использование управления доступом путем реализации IWbemEventProviderSecurity::AccessCheck является наиболее эффективным способом.

    Поставщик определяет, имеет ли потребитель права получения запрошенного события. Если потребитель не имеет достаточных привилегий для регистрации, WMI возвращает ошибку отказа в доступе. Используйте этот режим, когда поставщик может принять решение о том, кто может получать события. Например, поставщик может предоставлять события, связанные с безопасностью, и может требовать, чтобы потребитель имел права администратора с включенной привилегией SeSecurityPrivilege.

  • Реализация IWbemEventSink::SetSinkSecurity на приемнике, используемом для генерации событий, позволяет задать дескриптор безопасности (SD) на приемнике для всех событий, проходящих через него.

    WMI выполняет проверки доступа на основе SD. Используйте этот режим, когда поставщик не может принять решение о том, кто может потреблять его события, но может установить SD для определенного приемника. Например, используйте IWbemEventSink::SetSinkSecurity, если поставщик событий получил несколько приемников путем вызовов IWbemEventSink::GetRestrictedSink и требуется дескриптор безопасности для каждого приемника.

  • Задание свойства SECURITY_DESCRIPTOR события позволяет задать SD для каждого события.

    Используйте этот подход, когда каждое событие, доставленное в приемник, может иметь разные дескрипторы безопасности. Чтобы использовать этот подход, наследуйте любой из внешних классов событий, определенных вашим поставщиком, от __Event или __ExtrinsicEvent, так чтобы класс содержал свойство SECURITY_DESCRIPTOR. Например, поставщик событий может публиковать как безопасные, так и обычные события через приемник. В этом случае используйте дескриптор безопасности учетной записи администратора для безопасных событий и дескриптор безопасности NULL для обычных событий, которые могут быть получены любым пользователем.

Защита событий раздельными поставщиками событий

Поставщики событий, распределенные, отличаются от несегментированных поставщиков событий в том, как они регистрируются в WMI. Вызов IWbemEventProviderSecurity::AccessCheck для событий от отвязанного поставщика никогда не распространяет маркер доступа клиента. WMI обрабатывает управление доступом таким же образом, как и для недеинтерполируемых поставщиков событий. Дополнительные сведения о написании отдельного поставщика см. в разделе Интеграция поставщика в приложение.

Только администраторы с привилегиями FULL_WRITE, заданными в элементе управления WMIпанели управления, могут вызывать события для пространства имен. Для получения дополнительной информации см. раздел «Настройка безопасности пространства имен с помощью элемента управления WMI».

Обеспечение безопасности событий WMI