Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Aplica-se a:SQL Server
Este artigo fornece orientações que deve considerar antes de programar com o WMI Provider for Server Events.
Ativar o Corretor de Serviços
O WMI Provider for Server Events funciona ao traduzir consultas WQL para eventos em notificações de eventos na base de dados que está a direcionar. Compreender como funcionam as notificações de eventos pode ser-lhe útil ao programar contra o fornecedor. Para mais informações, consulte Fornecedor WMI para conceitos de Eventos de Servidor.
Em particular, porque as notificações de eventos criadas pelo Fornecedor WMI usam SQL Server para enviar mensagens sobre eventos do servidor, este serviço deve estar ativado onde quer que os eventos sejam gerados. Se o seu programa interrogar eventos numa instância de servidor, o Service Broker dessa msdb instância deve estar ativado, porque essa é a localização do serviço Service Broker alvo (chamado SQL/Notifications/ProcessWMIEventProviderNotification/v1.0) criado pelo fornecedor. Se o seu programa consultar eventos numa base de dados ou num objeto específico da base de dados, o Service Broker nessa base de dados alvo deve estar ativado. Se o Service Broker correspondente não estiver ativado após a implementação da sua aplicação, quaisquer eventos gerados pela notificação subjacente são enviados para a fila do serviço usado pela notificação do evento, mas não são devolvidos à sua aplicação de gestão WMI até que o Service Broker esteja ativado.
A seguinte consulta determina quais os service brokers que estão ativados numa instância de servidor e o GUID da instância do broker:
SELECT name, is_broker_enabled, service_broker_guid FROM sys.databases;
O intermediário de serviços GUID de msdb é de particular interesse porque é a localização do serviço-alvo do fornecedor.
Para ativar o Service Broker numa base de dados, use a opção ENABLE_BROKER SET da instrução ALTER DATABASE .
Especificar uma cadeia de ligação
As aplicações direcionam o Fornecedor WMI para Eventos de Servidor para uma instância de SQL Server ligando-se a um namespace WMI definido pelo fornecedor. O serviço WMI do Windows mapeia este espaço de nomes para a DLL do fornecedor, Sqlwep.dll, e carrega-o na memória. Cada instância do SQL Server tem o seu próprio espaço de nomes WMI, que por defeito é: \\.\root\Microsoft\SqlServer\ServerEvents\instance_name. instance_name por defeito usa MSSQLSERVER numa instalação padrão do SQL Server.
Permissões e autenticação do servidor
Para aceder ao Fornecedor WMI para Eventos do Servidor, o cliente onde uma aplicação de gestão WMI se origina deve corresponder ao login autenticado pelo Windows ou ao grupo na instância do SQL Server especificada na cadeia de ligação da aplicação.
Permissões e âmbito de notificação de eventos
O WMI Provider for Server Events traduz consultas WQL em notificações de eventos na base de dados alvo. Por isso, a aplicação que chama deve não só ter as permissões mínimas necessárias para aceder ao fornecedor, mas também as permissões corretas na base de dados para criar as notificações de eventos necessárias. As seguintes são as permissões:
Para criar uma notificação de evento que seja direcionada para a base de dados, no mínimo, é necessária permissão CRIAR NOTIFICAÇÃO DE EVENTO DDL na base de dados atual.
Para criar uma notificação de evento numa instrução DDL que seja encaminhada para o servidor, no mínimo, é necessária permissão de CRIAR NOTIFICAÇÃO DE EVENTO DDL no servidor.
Para criar uma notificação de evento num evento de rastreamento, no mínimo, é necessária permissão de CRIAR NOTIFICAÇÃO DE EVENTO DE RASTREIO no servidor.
Para criar uma notificação de evento que seja encaminhada para uma fila, no mínimo, é necessária permissão ALTER na fila.
Para informações sobre como as consultas WQL são definidas, consulte Utilização do WQL com o Fornecedor WMI para Eventos de Servidor.
Para ilustrar o âmbito, considere uma aplicação WMI Provider que inclui a seguinte consulta WQL:
SELECT * FROM ALTER_TABLE
WHERE DatabaseName = "AdventureWorks2022"
AND SchemaName = "Person"
AND ObjectName = "Person"
AND ObjectType = "TABLE";
O fornecedor WMI traduz esta consulta numa notificação de evento que é criada na AdventureWorks2025 base de dados. Isto significa que o chamador deve ter as permissões necessárias para criar tal notificação de evento, especificamente a permissão AdventureWorks2025 CRIAR NOTIFICAÇÃO DE EVENTO DDL NA BASE DE DADOS.
Se uma consulta WQL especificar uma notificação de evento com âmbito ao nível do servidor, por exemplo, ao emitir a consulta SELECT * FROM ALTER_TABLE, a aplicação que chama deve ter a permissão CREATE DDL EVENT NOTIFICATION ao nível do servidor. As notificações de eventos com âmbito de servidor são armazenadas na master base de dados. Pode usar a vista de catálogo sys.server_event_notifications para ver os metadados deles.
Observação
O âmbito da notificação de evento criada pelo Fornecedor WMI (servidor, base de dados ou objeto) depende, em última análise, do resultado do processo de verificação de permissões utilizado pelo fornecedor WMI. Isto é afetado pelo conjunto de permissões do utilizador que está a ligar para o fornecedor e pela verificação da base de dados que está a ser consultada.
No exemplo anterior, o fornecedor tenta primeiro criar uma notificação de evento com âmbito para a base de dados (ON DATABASE). Se o fornecedor verificar que a base de dados existe e que o interlocutor tem as permissões necessárias para criar uma notificação de evento nela, o registo é bem-sucedido. Se não for bem-sucedido, o fornecedor tenta criar uma notificação de evento no servidor (ON SERVER). Assumindo que esta tentativa é bem-sucedida, todos os ALTER_TABLE eventos que ocorrem no servidor são enviados do processo SQL Server para o processo do Serviço WMI. No entanto, o fornecedor filtra quaisquer eventos que não se apliquem à AdventureWorks2025 base de dados. Embora este processo possa aumentar a quantidade de tráfego de rede necessária para o âmbito do evento, também lhe permite a flexibilidade de registar consultas WQL em bases de dados antes de serem criadas e depois receber dados de eventos após a criação da base de dados e o início da atividade DDL.
Permissões e verificação de mensagens
O Fornecedor WMI não envia mensagens para notificações de eventos se ambas as seguintes condições forem verdadeiras:
O utilizador que criou a notificação de evento através do Fornecedor WMI já não existe na base de dados, ou já não tem a permissão necessária para criar uma notificação de evento semelhante.
As notificações de eventos são criadas nos seguintes eventos:
DROP_LOGINALTER_LOGINDROP_USERALTER_USERADD_ROLE_MEMBERDROP_ROLE_MEMBERADD_SERVER_ROLE_MEMBERDROP_SERVER_ROLE_MEMBERDENYouREVOKE(Aplica-se apenas aALTER DATABASE,ALTER ANY DATABASE EVENT NOTIFICATION,CREATE DATABASE DDL EVENT NOTIFICATION,CONTROL SERVER,ALTER ANY EVENT NOTIFICATION,CREATE DDL EVENT NOTIFICATION, ouCREATE TRACE EVENT NOTIFICATIONpermissões.)
Trabalhar com dados de eventos do lado do cliente
Depois de o Fornecedor WMI para Eventos do Servidor criar a notificação de eventos necessária na base de dados alvo, a notificação de evento envia os dados do evento para o serviço alvo em msdb que se chamam SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. O serviço alvo coloca o evento numa fila chamada msdbWMIEventProviderNotificationQueue. (Tanto o serviço como a fila são criados dinamicamente pelo fornecedor quando este se liga pela primeira vez ao SQL Server.) O fornecedor lê então os dados do evento XML desta fila e transforma-os em formato de objeto gerido (MOF) antes de os devolver à aplicação cliente. Os dados MOF são compostos pelas propriedades do evento solicitado pela consulta WQL como definição de classe Common Information Model (CIM). Cada propriedade tem um tipo CIM correspondente. Por exemplo, a SPID propriedade é devolvida como tipo CIM Sint32. Os tipos de CIM para cada propriedade estão listados em cada classe de evento no WMI Provider for Server Events classes and properties.