Configurar segurança de caixa de diálogo para notificações de evento

Aplica-se a: SQL Server

Agente de Serviço deve ser configurada para notificações de eventos que enviam mensagens a um agente de serviços em um servidor remoto. A segurança de diálogo deve ser configurada manualmente, de acordo com o modelo de segurança total de diálogo do Service Broker. O modelo de segurança total habilita criptografia e decodificação de mensagens enviadas para e de servidores remotos. Embora as notificações de eventos sejam enviadas em uma única direção, outras mensagens, como erros, também são retornadas para a direção oposta.

Configurando segurança de diálogo para notificações de eventos

O processo necessário para implementar segurança de diálogo para notificação de eventos é descrito nas etapas a seguir. Elas compreendem ações a serem efetuadas tanto no servidor de origem, quanto no servidor de destino. O servidor de origem é o servidor no qual a notificação de eventos está sendo criada. O servidor de destino é o servidor que recebe a mensagem de notificação de eventos. É necessário completar as ações de cada etapa em ambos os servidores, de origem e de destino, para poder passar à etapa seguinte.

Importante

Todos os certificados devem ser criados com datas válidas de início e de validade.

Etapa 1: Estabeleça um número da porta de TCP e o nome do serviço de destino.

Estabeleça a porta de TCP pela qual o servidor de origem e o servidor de destino receberão mensagens. Você também deve determinar o nome do serviço de destino.

Etapa 2: Configure criptografia e compartilhamento de certificados para autenticação em nível de banco de dados.

Efetue as ações abaixo nos servidores de origem e de destino.

Servidor de origem Servidor de destino
Escolha ou crie um banco de dados para guardar a notificação de eventos e a chave mestra. Escolha ou crie um banco de dados para guardar a chave mestra.
Se não existir uma chave mestra para o banco de dados de origem, crie uma chave mestra. É necessária uma chave mestra em ambos os bancos de dados (origem e destino), para ajudar a proteger seus respectivos certificados. Se não existir uma chave mestra para o banco de dados de destino, crie uma chave mestra.
Crie um logon e um usuário correspondente para o banco de dados de origem. Crie um logon e um usuário correspondente para o banco de dados de destino.
Crie um certificado de propriedade do usuário do banco de dados de origem. Crie um certificado de propriedade do usuário do banco de dados de destino.
Faça um backup do certificado em um arquivo que possa ser acessado pelo servidor de destino. Faça um backup do certificado em um arquivo que possa ser acessado pelo servidor de origem.
Crie um usuário, especificando o usuário do banco de dados de destino e WITHOUT LOGIN. Este usuário será proprietário do certificado de banco de dados de destino a ser criado a partir do arquivo de backup. O usuário não precisa ser mapeado para um logon, pois seu único propósito é possuir o certificado de banco de dados de destino criado na etapa 3 abaixo. Crie um usuário, especificando o usuário do banco de dados de origem e WITHOUT LOGIN. Este usuário será proprietário do certificado de banco de dados de origem a ser criado a partir do arquivo de backup. O usuário não precisa ser mapeado para um logon, pois seu único propósito é possuir o certificado de banco de dados de origem criado na etapa 3 abaixo.

Etapa 3: Compartilhe os certificados e conceda permissões para autenticação em nível de banco de dados.

Efetue as ações abaixo nos servidores de origem e de destino.

Servidor de origem Servidor de destino
Crie um certificado a partir do arquivo de backup do certificado de destino, especificando o usuário do banco de dados de destino como o proprietário. Crie um certificado a partir do arquivo de backup do certificado de origem, especificando o usuário do banco de dados de origem como o proprietário.
Conceda permissão para criar a notificação de eventos para o usuário do banco de dados de origem. Para obter mais informações sobre essa permissão, consulte CREATE EVENT NOTIFICATION (Transact-SQL). Conceda a permissão REFERENCES ao usuário do banco de dados de destino no contrato de notificações de eventos existentes do Service Broker: https://schemas.microsoft.com/SQL/Notifications/PostEventNotification.
Crie uma associação de serviço remoto ao serviço de destino e especifique as credenciais do usuário do banco de dados de destino. A associação do serviço remoto garante que a chave pública no certificado de propriedade do usuário do banco de dados de origem autentique as mensagens enviadas ao servidor de destino. Conceda permissões CREATE QUEUE, CREATE SERVICE e CREATE SCHEMA ao usuário do banco de dados de destino.
Caso ainda não esteja conectado ao banco de dados como usuário do banco de dados de destino, faça-o agora.
Crie uma fila para receber as mensagens de notificação de eventos e crie um serviço para entregar as mensagens.
Conceda permissão SEND no serviço de destino ao usuário do banco de dados de origem.
Forneça o identificador do agente de serviços do banco de dados de origem para o servidor de destino. Esse identificador pode ser obtido consultando-se a coluna service_broker_guid da exibição de catálogo sys.databases . Para uma notificação de eventos de nível de servidor, use o identificador do service broker do msdb. Forneça o identificador do agente de serviços do banco de dados de destino para o servidor de origem.

Etapa 4: Crie rotas e configure autenticação em nível de servidor.

Efetue as ações abaixo nos servidores de origem e de destino.

Servidor de origem Servidor de destino
Crie uma rota para o serviço de destino e especifique o identificador do service broker do banco de dados de destino e o número da porta de TCP estabelecido. Crie uma rota para o serviço de origem e especifique o identificador do agente de serviços do banco de dados de origem e o número de porta de TCP estabelecido. Para especificar o serviço de origem, use o seguinte serviço fornecido: https://schemas.microsoft.com/SQL/Notifications/EventNotificationService.
Mude para o banco de dados mestre para configurar a autenticação no nível de servidor. Mude para o banco de dados mestre para configurar a autenticação no nível de servidor.
Se não existir uma chave mestra para o banco de dados de mestre , crie uma chave mestra. Se não existir uma chave mestra para o banco de dados de mestre , crie uma chave mestra.
Crie um certificado que autentique o banco de dados. Crie um certificado que autentique o banco de dados.
Faça um backup do certificado em um arquivo que possa ser acessado pelo servidor de destino. Faça um backup do certificado em um arquivo que possa ser acessado pelo servidor de origem.
Crie um ponto de extremidadee especifique o número da porta de TCP estabelecido, FOR SERVICE_BROKER (AUTHENTICATION = CERTIFICATE certificate_name) e o nome do certificado de autenticação. Crie um ponto de extremidade e especifique o número da porta de TCP estabelecido, FOR SERVICE_BROKER (AUTHENTICATION = CERTIFICATE certificate_name) e o nome do certificado de autenticação.
Crie um logone especifique o logon do servidor de destino. Crie um logon e especifique o logon do servidor de origem.
Conceda permissão CONNECT no ponto de extremidade para o logon do autenticador de destino. Conceda permissão CONNECT no ponto de extremidade para o logon do autenticador de origem.
Crie um usuárioe especifique o logon do autenticador de destino. Crie um usuário e especifique o logon do autenticador de origem.

Etapa 5: Compartilhe certificados para autenticação em nível de servidor e crie a notificação de eventos.

Efetue as ações abaixo nos servidores de origem e de destino.

Servidor de origem Servidor de destino
Crie um certificado a partir do arquivo de backup do certificado de destino, especificando o autenticador de destino como o proprietário. Crie um certificado a partir do arquivo de backup do certificado de origem, especificando o autenticador de origem como o proprietário.
Alterne para o banco de dados de origem no qual criar a notificação de eventos e, caso ainda não esteja conectado como usuário do banco de dados de origem, faça-o agora. Alterne para o banco de dados de destino a receber as mensagens de notificação de eventos.
Crie a notificação de eventose especifique o agente de serviços e o identificador do banco de dados de destino.

Confira também

GRANT (Transact-SQL)
BACKUP CERTIFICATE (Transact-SQL)
sys.databases (Transact-SQL)
Hierarquia de criptografia
Implementar notificações de evento
CREATE MASTER KEY (Transact-SQL)
CREATE LOGIN (Transact-SQL)
CREATE USER (Transact-SQL)
CREATE CERTIFICATE (Transact-SQL)
CREATE REMOTE SERVICE BINDING (Transact-SQL)
GRANT (Transact-SQL)
CREATE ROUTE (Transact-SQL)
CREATE QUEUE (Transact-SQL)
CREATE SERVICE (Transact-SQL)
CREATE ENDPOINT (Transact-SQL)
CREATE EVENT NOTIFICATION (Transact-SQL)