Neste artigo, exploraremos o conceito de autenticação baseada em certificado no SQL Server. A autenticação baseada em certificado é um método de verificação da identidade de dois pontos finais em uma comunicação do Service Broker. Ela é baseada nos princípios da criptografia assimétrica, que envolve o uso de pares de chaves pública e privada.
Ao usar a autenticação baseada em certificado, cada ponto final é configurado com uma chave privada armazenada localmente e uma chave pública correspondente implantada como um certificado para o parceiro de comunicação. A chave privada é armazenada com segurança e acessível apenas ao seu proprietário, enquanto a chave pública pode ser exposta com segurança sem comprometer a confidencialidade de sua contraparte.
Para implementar a autenticação baseada em certificado no SQL Server, você precisa criar certificados X.509 autoassinados usando a instrução CREATE CERTIFICATE. Esse processo requer uma chave mestra do banco de dados, que é usada para criptografar a chave privada. A chave mestra deve ser criada no banco de dados mestre em ambos os servidores.
Uma vez que os certificados são criados, eles podem ser usados para configurar os pontos finais. A instrução CREATE ENDPOINT é usada para criar os pontos finais, especificando o método de autenticação como CERTIFICATE e fornecendo o nome do certificado. Os pontos finais devem ser criados em ambos os servidores, iniciador e alvo.
Aqui está um exemplo de criação dos pontos finais:
-- no srvExp01
USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '1m$0C0mPleX'
GO
CREATE CERTIFICATE cert_SB_01_Express
WITH SUBJECT = 'Certificado SB_01_Express'
GO
BACKUP CERTIFICATE cert_SB_01_Express
TO FILE = 'C:Tempcert_SB_01_Express.cer'
GO
CREATE ENDPOINT EP_SB_01_Express
STATE = STARTED
AS TCP (LISTENER_PORT = 4022)
FOR SERVICE_BROKER (
AUTHENTICATION = CERTIFICATE cert_SB_01_Express,
ENCRYPTION = DISABLED);
-- no srvEnt01
USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'H@rD2GuE$$'
GO
CREATE CERTIFICATE cert_SB_02_Enterprise
WITH SUBJECT = 'Certificado SB_02_Enterprise'
GO
BACKUP CERTIFICATE cert_SB_02_Enterprise
TO FILE = 'C:Tempcert_SB_02_Enterprise.cer'
GO
CREATE ENDPOINT EP_SB_02_Enterprise
STATE = STARTED
AS TCP (LISTENER_PORT = 4022)
FOR SERVICE_BROKER (
AUTHENTICATION = CERTIFICATE cert_SB_02_Enterprise,
ENCRYPTION = DISABLED);
Uma vez que os pontos finais são criados, você precisa conceder permissões de ENVIO em ambos os serviços para a função Pública nos respectivos bancos de dados. Isso permite que a função Pública inicie diálogos do Service Broker e envie mensagens para o serviço de destino.
Aqui está um exemplo de concessão de permissões de ENVIO:
-- no srvExp01
USE dbSBExp01
GO
GRANT SEND ON
SERVICE::[//databaseJournal.com/SQL2005EX/ServiceBroker/svcSend] TO Public
-- no srvEnt01
USE dbSBEnt01
GO
GRANT SEND ON
SERVICE::[//databaseJournal.com/SQL2005EX/ServiceBroker/svcRecv] TO Public
No próximo artigo de nossa série, continuaremos explorando as etapas necessárias para estabelecer um diálogo do Service Broker em um ambiente distribuído usando autenticação baseada em certificado.
Fique ligado para mais dicas e truques do SQL Server!