Arbeiten mit dem WMI-Anbieter für Serverereignisse

Gilt für:SQL Server

Dieser Artikel enthält Richtlinien, die Sie berücksichtigen sollten, bevor Sie den WMI-Anbieter für Serverereignisse verwenden.

Aktivieren des Dienstbrokers

Der WMI-Anbieter für Serverereignisse übersetzt WQL-Abfragen für Ereignisse in Ereignisbenachrichtigungen in der Zieldatenbank. Kenntnisse darüber, wie Ereignisbenachrichtigungen funktionieren, können bei der Programmierung mit dem Anbieter hilfreich sein. Weitere Informationen finden Sie unter WMI-Anbieter für Serverereignisse.For more information, see WMI Provider for Server Events concepts.

Da die vom WMI-Anbieter erstellten Ereignisbenachrichtigungen SQL Server zum Senden von Nachrichten zu Serverereignissen verwenden, muss dieser Dienst aktiviert werden, wo immer die Ereignisse generiert werden. Wenn Ihr Programm Ereignisse in einer Serverinstanz abfragt, muss der Dienstbroker in msdb dieser Instanz aktiviert sein, da dies der Speicherort des Zieldienstbrokerdiensts (mit dem Namen SQL/Notifications/ProcessWMIEventProviderNotification/v1.0) ist, der vom Anbieter erstellt wird. Wenn Ihr Programm Ereignisse in einer Datenbank oder in einem bestimmten Datenbankobjekt abfragt, muss der Service Broker in dieser Zieldatenbank aktiviert sein. Wenn der entsprechende Dienstbroker nach der Bereitstellung Der Anwendung nicht aktiviert ist, werden alle ereignisse, die von der zugrunde liegenden Ereignisbenachrichtigung generiert werden, an die Warteschlange des Diensts gesendet, der von der Ereignisbenachrichtigung verwendet wird, aber erst dann an Ihre WMI-Verwaltungsanwendung zurückgegeben, wenn der Dienstbroker aktiviert ist.

Mit der folgenden Abfrage wird bestimmt, welche Service Broker auf einer Serverinstanz aktiviert werden, und die GUID der Broker-Instanz wird festgelegt:

SELECT name, is_broker_enabled, service_broker_guid FROM sys.databases;

Die GUID msdb des Servicebrokers ist von besonderem Interesse, da dies der Standort des Zieldiensts des Anbieters ist.

Verwenden Sie zum Aktivieren des Dienstbrokers in einer Datenbank die option ENABLE_BROKER SET der ALTER DATABASE-Anweisung .

Angeben einer Verbindungszeichenfolge

Anwendungen leiten den WMI-Anbieter für Serverereignisse an eine Instanz von SQL Server weiter, indem eine Verbindung mit einem vom Anbieter definierten WMI-Namespace hergestellt wird. Der WMI-Dienst ordnet der Anbieter-DLL Sqlwep.dll diesen Namespace zu und lädt sie in den Arbeitsspeicher. Jede Instanz von SQL Server verfügt über einen eigenen WMI-Namespace, der standardmäßig auf "\\.\root\Microsoft\SqlServer\ServerEvents\instance_name" festgelegt ist. instance_name standardmäßig msSQLSERVER in einer Standardinstallation von SQL Server.

Berechtigungen und Serverauthentifizierung

Um auf den WMI-Anbieter für Serverereignisse zuzugreifen, muss der Client, auf dem eine WMI-Verwaltungsanwendung stammt, windows-authentifizierte Anmeldung oder -Gruppe in der Instanz von SQL Server entsprechen, die in der Verbindungszeichenfolge der Anwendung angegeben ist.

Berechtigungs- und Ereignisbenachrichtigungsbereich

Der WMI-Anbieter für Serverereignisse übersetzt WQL-Abfragen in Ereignisbenachrichtigungen in der Zieldatenbank. Aus diesem Gründen muss die aufrufende Anwendung nicht nur über die erforderlichen Mindestberechtigungen für den Zugriff auf den Anbieter verfügen, sondern auch über die richtigen Berechtigungen in der Datenbank verfügen, um die erforderlichen Ereignisbenachrichtigungen zu erstellen. Die folgenden Berechtigungen sind erforderlich:

  • Zum Erstellen einer Ereignisbenachrichtigung, die sich auf die Datenbank bezieht, ist mindestens die CREATE DATABASE DDL EVENT NOTIFICATION-Berechtigung in der aktuellen Datenbank erforderlich.

  • Zum Erstellen einer Ereignisbenachrichtigung für eine DDL-Anweisung, die sich auf den Server bezieht, ist mindestens die CREATE DDL EVENT NOTIFICATION-Berechtigung auf dem Server erforderlich.

  • Zum Erstellen einer Ereignisbenachrichtigung für ein Ablaufverfolgungsereignis ist mindestens die CREATE TRACE EVENT NOTIFICATION-Berechtigung auf dem Server erforderlich.

  • Zum Erstellen einer Ereignisbenachrichtigung, die sich auf eine Warteschlange bezieht, ist mindestens die ALTER-Berechtigung für die Warteschlange erforderlich.

Informationen zum Bereich von WQL-Abfragen finden Sie unter Verwenden von WQL mit dem WMI-Anbieter für Serverereignisse.

Betrachten Sie zur Darstellung des Bereichs eine WMI-Anbieteranwendung, die die folgende WQL-Abfrage enthält:

SELECT * FROM ALTER_TABLE
WHERE DatabaseName = "AdventureWorks2022"
    AND SchemaName = "Person"
    AND ObjectName = "Person"
    AND ObjectType = "TABLE";

Der WMI-Anbieter übersetzt diese Abfrage in eine Ereignisbenachrichtigung, die in der Datenbank AdventureWorks2022 erstellt wird. Das bedeutet, dass der Aufrufer über die erforderlichen Berechtigungen zum Erstellen einer Ereignisbenachrichtigung dieser Art, insbesondere über die CREATE DATABASE DDL EVENT NOTIFICATION-Berechtigung, in der Datenbank AdventureWorks2022 verfügen muss.

Wenn eine WQL-Abfrage eine auf der Serverebene zugewiesene Ereignisbenachrichtigung beispielsweise durch die Ausgabe der Abfrage SELECT * FROM ALTER_TABLE angibt, muss die aufrufende Anwendung über die Berechtigung CREATE DDL EVENT NOTIFICATION auf Serverebene verfügen. Serverweite Ereignisbenachrichtigungen werden in der master Datenbank gespeichert. Sie können die sys.server_event_notifications Katalogansicht verwenden, um deren Metadaten anzuzeigen.

Hinweis

Der vom WMI-Anbieter (Server, Datenbank oder Objekt) erstellte Bereich der Ereignisbenachrichtigung ist letztlich von dem vom WMI-Anbieter verwendeten Ergebnis der Überprüfung der Berechtigungen abhängig. Dies wird durch die Berechtigungen des Benutzers, der den Anbieter aufruft, sowie durch die Überprüfung der abgefragten Datenbank bestimmt.

Im vorherigen Beispiel erstellt der Anbieter zunächst eine Ereignisbenachrichtigung, die sich auf die Datenbank bezieht (ON DATABASE). Wenn der Anbieter bestätigt, dass die Datenbank vorhanden ist und dass der Aufrufer über die erforderlichen Berechtigungen zum Erstellen einer Ereignisbenachrichtigung in der Datenbank verfügt, ist die Registrierung erfolgreich. Wenn dies nicht erfolgreich ist, versucht der Anbieter, eine Ereignisbenachrichtigung auf dem Server (ON SERVER) zu erstellen. Wenn dieser Versuch erfolgreich ist, werden alle ALTER_TABLE Ereignisse, die auf dem Server auftreten, vom SQL Server-Prozess an den WMI-Dienstprozess gesendet. Der Anbieter filtert jedoch alle Ereignisse heraus, die nicht für die AdventureWorks2022 Datenbank gelten. Durch diesen Prozess wird der Netzwerkverkehr, der für den Bereich des Ereignisses erforderlich ist, möglicherweise erhöht. Mithilfe dieses Prozesses können Sie jedoch WQL-Abfragen bereits vor dem Erstellen von Datenbanken auf den Datenbanken registrieren und nach dem Erstellen der Datenbank Ereignisdaten empfangen und DDL-Aktivitäten starten.

Berechtigungen und Nachrichtenüberprüfung

Der WMI-Anbieter sendet keine Nachrichten für Ereignisbenachrichtigungen, wenn beide der folgenden Bedingungen zutreffen:

  • Der Benutzer, der die Ereignisbenachrichtigung über den WMI-Anbieter erstellt hat, ist in der Datenbank nicht mehr vorhanden oder verfügt nicht mehr über die erforderliche Berechtigung zum Erstellen einer ähnlichen Ereignisbenachrichtigung.

  • Die Ereignisbenachrichtigungen werden bei folgenden Ereignissen erstellt:

    • DROP_LOGIN

    • ALTER_LOGIN

    • DROP_USER

    • ALTER_USER

    • ADD_ROLE_MEMBER

    • DROP_ROLE_MEMBER

    • ADD_SERVER_ROLE_MEMBER

    • DROP_SERVER_ROLE_MEMBER

    • DENYoder REVOKE (Gilt nur für ALTER DATABASE, , ALTER ANY DATABASE EVENT NOTIFICATION, CREATE DATABASE DDL EVENT NOTIFICATION, CONTROL SERVER, ALTER ANY EVENT NOTIFICATION, oder CREATE DDL EVENT NOTIFICATIONCREATE TRACE EVENT NOTIFICATION Berechtigungen.)

Arbeiten mit Ereignisdaten auf clientseitiger Seite

Nachdem der WMI-Anbieter für Serverereignisse die erforderliche Ereignisbenachrichtigung in der Zieldatenbank erstellt hat, sendet die Ereignisbenachrichtigung Ereignisdaten an den Zieldienst mit msdb dem Namen SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. Der Zieldienst fügt das Ereignis in eine Warteschlange ein, die msdb den Namen WMIEventProviderNotificationQueue hat. (Sowohl der Dienst als auch die Warteschlange werden dynamisch vom Anbieter erstellt, wenn die Verbindung zum ersten Mal mit SQL Server hergestellt wird.) Der Anbieter liest dann die XML-Ereignisdaten aus dieser Warteschlange und transformiert sie in das verwaltete Objektformat (MOF), bevor er an die Clientanwendung zurückgegeben wird. Die MOF-Daten bestehen aus den Eigenschaften des Ereignisses, das von der WQL-Abfrage als CIM-Classendefinition (Common Information Model) angefordert wird. Jede Eigenschaft verfügt über einen entsprechenden CIM-Typ. Die Eigenschaft wird beispielsweise SPID als CIM-Typ Sint32 zurückgegeben. Die CIM-Typen für jede Eigenschaft werden unter jeder Ereignisklasse im WMI-Anbieter für Serverereignisse-Klassen und -Eigenschaften aufgeführt.