Freigeben über


Arbeiten mit dem WMI-Anbieter für Serverereignisse

Dieses Thema 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 funktioniert, indem WQL-Abfragen für Ereignisse in Ereignisbenachrichtigungen in der Datenbank übersetzt werden, auf die Sie abzielen. Ein Verständnis dafür, wie Ereignisbenachrichtigungen funktionieren, kann bei der Programmierung mit dem Anbieter hilfreich sein. Weitere Informationen finden Sie unter WMI-Anbieter für Serverereignissekonzepte.

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.

Die folgende Abfrage bestimmt, welche Dienstbroker auf einer Serverinstanz aktiviert sind, und die GUID der Brokerinstanz:

SELECT name, is_broker_enabled, service_broker_guid FROM sys.databases;  

Die Dienstbroker-GUID von msdb ist von besonderem Interesse, da dies der Speicherort 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 Windows-WMI-Dienst ordnet diesen Namespace der Anbieter-DLL, Sqlwep.dll, zu und lädt ihn 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, der windows-authentifizierten 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. Im Folgenden sind die Berechtigungen aufgeführt:

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

  • Um eine Ereignisbenachrichtigung für eine DDL-Anweisung zu erstellen, die auf den Server festgelegt ist, ist mindestens die CREATE DDL EVENT NOTIFICATION-Berechtigung auf dem Server erforderlich.

  • Um eine Ereignisbenachrichtigung für ein Ablaufverfolgungsereignis zu erstellen, ist mindestens die BERECHTIGUNG CREATE TRACE EVENT NOTIFICATION auf dem Server erforderlich.

  • Um eine Ereignisbenachrichtigung zu erstellen, die auf eine Warteschlange festgelegt ist, 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.

Um den Bereich zu veranschaulichen, sollten Sie eine WMI-Anbieteranwendung in Betracht ziehen, die die folgende WQL-Abfrage enthält:

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

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

Wenn eine WQL-Abfrage eine Ereignisbenachrichtigung auf Serverebene angibt, z. B. durch Ausstellen der Abfrage SELECT * FROM ALTER_TABLE, muss die aufrufende Anwendung über die BERECHTIGUNG CREATE DDL EVENT NOTIFICATION auf Serverebene verfügen. Beachten Sie, dass Serverbereichsereignisbenachrichtigungen in der Masterdatenbank gespeichert werden. Sie können die sys.server_event_notifications Katalogansicht verwenden, um deren Metadaten anzuzeigen.

Hinweis

Der Umfang der Ereignisbenachrichtigung, die vom WMI-Anbieter (Server, Datenbank oder Objekt) erstellt wird, hängt letztendlich vom Ergebnis des Berechtigungsüberprüfungsprozesses ab, der vom WMI-Anbieter verwendet wird. Dies wird von dem Berechtigungssatz des Benutzers beeinflusst, der den Anbieter aufruft, und die Überprüfung der datenbank, die abgefragt wird.

Im vorherigen Beispiel versucht der Anbieter zunächst, eine Ereignisbenachrichtigung für die Datenbank (ON DATABASE) zu erstellen. Wenn der Anbieter überprüft, ob die Datenbank vorhanden ist und der Aufrufer über die erforderlichen Berechtigungen zum Erstellen einer Ereignisbenachrichtigung 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 aus, die nicht für die AdventureWorks Datenbank gelten. Obwohl dieser Prozess möglicherweise die Für den Umfang des Ereignisses erforderliche Menge des Netzwerkdatenverkehrs erhöht, ermöglicht dieser Prozess Ihnen auch die Flexibilität, WQL-Abfragen für Datenbanken zu registrieren, bevor sie erstellt werden, und dann Ereignisdaten empfangen, nachdem die Datenbank erstellt wurde und die DDL-Aktivität gestartet wird.

Berechtigungen und Nachrichtenüberprüfung

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

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

  • Die Ereignisbenachrichtigungen werden für die folgenden Ereignisse erstellt:

    • DROP_LOGIN

    • ALTER_LOGIN

    • DROP_USER

    • ALTER_USER

    • ADD_ROLE_MEMBER

    • DROP_ROLE_MEMBER

    • ADD_SERVER_ROLE_MEMBER

    • DROP_SERVER_ROLE_MEMBER

    • VERWEIGERN oder WIDERRUFEN (Gilt nur für ALTER DATABASE, ALTER ANY DATABASE EVENT NOTIFICATION, CREATE DATABASE DDL EVENT NOTIFICATION, CONTROL SERVER, ALTER ANY EVENT NOTIFICATION, CREATE DDL EVENT NOTIFICATION, OR CREATE TRACE EVENT NOTIFICATION).)

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 in msdb, der den Namen SQL/Notifications/ProcessWMIEventProviderNotification/v1.0 hat. Der Zieldienst fügt das Ereignis in eine Warteschlange ein, die msdbden 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-Klassendefinition (Common Information Model) angefordert wird. Jede Eigenschaft weist einen entsprechenden CIM-Typ auf. Die Eigenschaft wird beispielsweise SPID als CIM-Typ Sint32zurückgegeben. Die CIM-Typen für jede Eigenschaft werden unter jeder Ereignisklasse im WMI-Anbieter für Serverereignisse Klassen und Eigenschaften aufgeführt.

Siehe auch

Konzepte des WMI-Anbieters für Serverereignisse