Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tópico fornece diretrizes que você deve considerar antes de programar usando o provedor WMI para eventos de servidor.
Habilitando o Service Broker
O Provedor WMI para Eventos de Servidor funciona traduzindo consultas WQL para eventos em notificações de evento no banco de dados de destino. Uma compreensão de como as notificações de eventos funcionam pode ser útil para você ao programar no provedor. Para obter mais informações, veja Provedor WMI para conceitos de eventos de servidor.
Em particular, como as notificações de evento criadas pelo provedor WMI usam o SQL Server para enviar mensagens sobre eventos de servidor, esse serviço deve ser habilitado onde quer que os eventos sejam gerados. Se o programa consulta eventos em uma instância de servidor, o Service Broker no msdb dessa instância deve ser habilitado, pois esse é o local do serviço service broker de destino (chamado SQL/Notifications/ProcessWMIEventProviderNotification/v1.0) criado pelo provedor. Se o programa consulta eventos em um banco de dados ou em um objeto de banco de dados específico, o Service Broker nesse banco de dados de destino deve ser habilitado. Se o Service Broker correspondente não estiver habilitado depois que seu aplicativo for implantado, todos os eventos gerados pela notificação de evento subjacente serão enviados para a fila do serviço usado pela notificação de evento, mas não serão retornados ao aplicativo de gerenciamento WMI até que o Service Broker esteja habilitado.
A consulta a seguir determina quais agentes de serviço estão habilitados em uma instância de servidor e o GUID da instância do agente:
SELECT name, is_broker_enabled, service_broker_guid FROM sys.databases;
O GUID do agente de serviços do msdb é de interesse particular porque esse é o local do serviço de destino do provedor.
Para habilitar o Service Broker em um banco de dados, use a opção ENABLE_BROKER SET da instrução ALTER DATABASE .
Especificando uma cadeia de conexão
Os aplicativos direcionam o Provedor WMI para Eventos de Servidor para uma instância do SQL Server conectando-se a um namespace WMI definido pelo provedor. O serviço WMI do Windows mapeia esse namespace para a DLL do provedor, Sqlwep.dlle o carrega na memória. Cada instância do SQL Server tem seu próprio namespace WMI, que usa como padrão: \\.\root\Microsoft\SqlServer\ServerEvents\instance_name. instance_name padrão para MSSQLSERVER em uma instalação padrão do SQL Server.
Permissões e autenticação de servidor
Para acessar o Provedor WMI para Eventos de Servidor, o cliente no qual um aplicativo de gerenciamento WMI é originado deve corresponder ao logon ou grupo autenticado do Windows na instância do SQL Server especificada na cadeia de conexão do aplicativo.
Permissões e Escopo de Notificação de Eventos
O Provedor WMI para Eventos de Servidor converte consultas WQL em notificações de evento no banco de dados de destino. Por isso, o aplicativo de chamada deve ter não apenas as permissões mínimas necessárias para acessar o provedor, mas também deve ter as permissões corretas no banco de dados para criar as notificações de evento necessárias. Veja a seguir as permissões:
Para criar uma notificação de evento com escopo para o banco de dados, no mínimo, a permissão CREATE DATABASE DDL EVENT NOTIFICATION no banco de dados atual é necessária.
Para criar uma notificação de evento em uma instrução DDL com escopo para o servidor, no mínimo, a permissão CREATE DDL EVENT NOTIFICATION no servidor é necessária.
Para criar uma notificação de evento em um evento de rastreamento, no mínimo, a permissão CREATE TRACE EVENT NOTIFICATION no servidor é necessária.
Para criar uma notificação de evento com escopo para uma fila, no mínimo, a permissão ALTER na fila é necessária.
Para obter informações sobre como as consultas WQL têm escopo, consulte Como usar o WQL com o provedor WMI para eventos de servidor.
Para ilustrar o escopo, considere um aplicativo WMI Provider que inclui a seguinte consulta WQL:
SELECT * FROM ALTER_TABLE
WHERE DatabaseName = "AdventureWorks2012"
AND SchemaName = "Person"
AND ObjectName = "Person"
AND ObjectType = "TABLE";
O provedor WMI converte essa consulta em uma notificação de evento criada no banco de dados AdventureWorks2012 . Isso significa que o chamador deve ter as permissões necessárias para criar essa notificação de evento, especificamente a permissão CREATE DATABASE DDL EVENT NOTIFICATION no banco de dados AdventureWorks2012 .
Se uma consulta WQL especificar uma notificação de evento com escopo no nível do servidor, por exemplo, emitindo a consulta SELECT * FROM ALTER_TABLE, o aplicativo de chamada deverá ter a permissão CREATE DDL EVENT NOTIFICATION no nível do servidor. Observe que as notificações de evento no escopo do servidor são armazenadas no banco de dados mestre. Você pode usar a exibição de catálogo sys.server_event_notifications para ver seus metadados.
Observação
O escopo da notificação de evento criada pelo provedor WMI (servidor, banco de dados ou objeto) depende, em última análise, do resultado do processo de verificação de permissões usado pelo provedor WMI. Isso é afetado pelo conjunto de permissões do usuário que está chamando o provedor e na verificação do banco de dados que está sendo consultado.
No exemplo anterior, o provedor primeiro tenta criar uma notificação de evento com escopo para o banco de dados (ON DATABASE). Se o provedor verificar se o banco de dados existe e se o chamador tem as permissões necessárias para criar uma notificação de evento nele, o registro será bem-sucedido. Se não for bem-sucedido, o provedor tentará criar uma notificação de evento no servidor (ON SERVER). Supondo que essa tentativa seja bem-sucedida, todos os ALTER_TABLE eventos que ocorrem no servidor são enviados do processo do SQL Server para o processo do Serviço WMI. No entanto, o provedor filtra todos os eventos que não se aplicam ao AdventureWorks banco de dados. Embora esse processo potencialmente aumente a quantidade de tráfego de rede necessária para o escopo do evento, esse processo também permite que você, com a flexibilidade, registre consultas WQL em bancos de dados antes de serem criadas e, em seguida, receba dados de evento depois que o banco de dados é criado e a atividade DDL começa nele.
Permissões e verificação de mensagem
O Provedor WMI não enviará mensagens para notificações de evento se ambas as seguintes condições forem verdadeiras:
O usuário que criou a notificação de evento por meio do Provedor WMI não existe mais no banco de dados ou não tem mais a permissão necessária para criar uma notificação de evento semelhante.
As notificações de evento são criadas nos seguintes eventos:
DROP_LOGIN
ALTER_LOGIN
DROP_USER
ALTER_USER
ADICIONAR_MEMBRO_DE_FUNÇÃO
DROP_ROLE_MEMBER
ADD_SERVER_ROLE_MEMBER
Remover_Membro_Função_Servidor
DENY ou REVOKE (Aplica-se somente a ALTER DATABASE, ALTER ANY DATABASE EVENT NOTIFICATION, CREATE DATABASE DDL EVENT NOTIFICATION, CONTROL SERVER, ALTER ANY EVENT NOTIFICATION, CREATE DDL EVENT NOTIFICATION OU CREATE TRACE EVENT NOTIFICATION PERMISSIONS.)
Trabalhando com dados de evento no lado do cliente
Depois que o Provedor WMI para Eventos de Servidor cria a notificação de evento necessária no banco de dados de destino, a notificação de evento envia dados de evento para o serviço de destino no msdb chamado SQL/Notifications/ProcessWMIEventProviderNotification/v1.0. O serviço de destino coloca o evento em uma fila chamada msdbWMIEventProviderNotificationQueue. (O serviço e a fila são criados dinamicamente pelo provedor quando ele se conecta pela primeira vez ao SQL Server).) Em seguida, o provedor lê os dados de evento XML dessa fila e os transforma em MOF (formato de objeto gerenciado) antes de devolvê-los ao aplicativo cliente. Os dados do MOF são compostos pelas propriedades do evento solicitadas pela consulta WQL como uma definição de classe CIM (Common Information Model). Cada propriedade tem um tipo CIM correspondente. Por exemplo, a SPID propriedade é retornada como tipo Sint32CIM. Os tipos de CIM para cada propriedade são listados em cada classe de evento no Provedor WMI para Classes e Propriedades de Eventos de Servidor.