Dieser Artikel beschreibt, wie Sie Zertifikate für Remotesicherheit in SQL Server 2005 Service Broker bei mehreren Instanzen von SQL Server 2005 benutzen. Mithilfe von Zertifikaten können Sie in dieser Situation sichere Verbindungen ermöglichen.
Remotesicherheit in SQL Server 2005 Service Broker beinhaltet Vorgänge, die sich auf mehr als eine Instanz von SQL Server beziehen, wenn diese Vorgänge entweder Dialog- oder Transportsicherheit verwenden. Das folgende Beispiel veranschaulicht, wie Sie Zertifikate für Remotesicherheit in SQL Server 2005 Service Broker bei zwei Instanzen von SQL Server 2005 benutzen.
In diesem Beispiel wird davon ausgegangen, dass die nachstehenden Voraussetzungen erfüllt sind:
- Sie haben vier Zertifikate und vier Dateien für private Schüssel mit dem Programm "Zertifikaterstellung" (Makecert.exe) erstellt. In diesem Beispiel wird davon ausgegangen, dass die Dateien auf beiden Servern in den Ordner "C:\Certificates" kopiert und folgendermaßen benannt wurden:
- SourceServer.cer
- SourceServer.pvk
- TargetServer.cer
- TargetServer.pvk
- DlgSourceServer.cer
- DlgSourceServer.pvk
- DlgTargetServer.cer
- DlgTargetServer.pvk
Weitere Informationen zum Erstellen von Zertifikaten für Testzwecke finden Sie auf folgender Website des Microsoft Developer Network (MSDN): - Sie haben zwei Instanzen von SQL Server 2005 auf unterschiedlichen Servern im selben Netzwerk installiert. In diesem Beispiel wird davon ausgegangen, dass der erste Server "ServerSrc" und der zweite "ServerTag" heißt.
- Sie verbinden sich mit den beiden Instanzen mit Benutzernamen, die Mitglieder der festen Serverrolle "sysadmin" sind.
- Sie haben sichergestellt, dass der TCP-Port 4022 verfügbar ist. In diesem Beispiel wird der Port von beiden Instanzen verwendet, um sich miteinander zu verbinden.
Wenn alle vorstehenden Bedingungen erfüllt sind, gehen Sie folgendermaßen vor:
Konfigurieren von SQL Server 2005 Service Broker für die Instanz von SQL Server auf dem ServerSrc-Server
- Stellen Sie mit SQL Server Management Studio eine Verbindung zu der Instanz auf dem ServerSrc-Server her.
- Führen Sie folgende Transact-SQL-Anweisungen im Abfrage-Editor aus:
--Configure the transport security.
USE MASTER
go
--Create a master key in the master database.
CREATE MASTER KEY ENCRYPTION BY password = 'MasterKeyPassword'
Go
--Create a certificate for transport security.
CREATE CERTIFICATE ctfSourceServerMaster
FROM FILE = 'C:\Certificates\SourceServer.cer'
WITH PRIVATE KEY ( FILE = 'C:\Certificates\SourceServer.pvk' , DECRYPTION BY PASSWORD = 'PrivateKeyPassword' )
ACTIVE FOR BEGIN_DIALOG = ON
GO
--Create the login and the user to own a certificate.
CREATE LOGIN remcert WITH PASSWORD = 'LoginPassword'
GO
CREATE USER remcert FOR LOGIN remcert
GO
CREATE CERTIFICATE ctftTargetServerMaster
AUTHORIZATION remcert
FROM FILE = 'C:\Certificates\TargetServer.cer'
ACTIVE FOR BEGIN_DIALOG = ON
GO
--Create a new endpoint for SQL Server 2005 Service Broker, and set the AUTHENTICATION option to use the ctfSourceServerMaster certificate.
CREATE ENDPOINT BrokerEndpoint
STATE = STARTED
AS TCP
(
LISTENER_PORT = 4022
)
FOR SERVICE_BROKER (AUTHENTICATION = CERTIFICATE ctfSourceServerMaster)
GO
--Grant the required permissions to the remcert login.
GRANT CONNECT TO remcert
GRANT CONNECT ON ENDPOINT::BrokerEndpoint to remcert
GO
--Create a new database for testing.
CREATE DATABASE SourceDB
GO
USE SourceDB
GO
--Configure the dialog security.
--Create a master key in the SourceDB database.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKeyPassword'
--Create a certificate for the SourceDB database.
CREATE CERTIFICATE ctfDlgSourceServer
FROM FILE = 'C:\certificates\DlgSourceServer.cer'
WITH PRIVATE KEY
(FILE='C:\certificates\DlgSourceServer.pvk',decryption by password='PrivateKeyPassword')
ACTIVE FOR BEGIN_DIALOG = ON
GO
--Create a user for the remcert login that owns a certificate for the dialog security.
CREATE USER remcert for LOGIN remcert
GO
CREATE CERTIFICATE ctfDlgTargetServer
AUTHORIZATION remcert
FROM FILE = 'C:\certificates\DlgTargetServer.cer'
ACTIVE FOR BEGIN_DIALOG = ON
--Create a message type, a contract, a queue, and a service.
CREATE MESSAGE TYPE [mymsg] VALIDATION = NONE
CREATE CONTRACT [mycon] ([mymsg] SENT BY ANY)
CREATE QUEUE [myQueue]
CREATE SERVICE [SourceService] ON QUEUE [myQueue]([mycon])
GO
--Grant the send permission to the user.
GRANT SEND ON SERVICE::[SourceService] TO remcert
--Create a remote service binding for the target service.
CREATE REMOTE SERVICE BINDING [Certificate_Binding_on_server]
TO SERVICE 'TargetService'
WITH USER = remcert,
ANONYMOUS=Off
--Create a route for the target service.
CREATE ROUTE [myRoute]
WITH
SERVICE_NAME = 'TargetService',
address = 'TCP://ServerTag:4022';
Hinweis: MasterKeyPassword ist ein Platzhalter für das Kennwort des Hauptschlüssels, das Sie für die Datenbank angeben müssen. PrivateKeyPassword ist ein Platzhalter für das Kennwort des privaten Schlüssels, das Sie für die private Schlüsseldatei (.pvk) mit dem Programm "Zertifikaterstellung" festgelegt haben. LoginPassword ist ein Platzhalter für das Kennwort des neu erstellten Benutzernamens.
Konfigurieren von SQL Server 2005 Service Broker für die Instanz von SQL Server auf dem ServerTag-Server
- Stellen Sie mit SQL Server Management Studio eine Verbindung zu der Instanz auf dem ServerTag-Server her.
- Führen Sie folgende Transact-SQL-Anweisungen im Abfrage-Editor aus:
--Configure the transport security.
USE MASTER
go
--Create a master key in the master database.
CREATE MASTER KEY ENCRYPTION BY password = 'MasterKeyPassword'
Go
--Create a certificate for transport security.
CREATE CERTIFICATE ctfTargetServerMaster
FROM FILE = 'c:\certificates\TargetServer.cer'
WITH PRIVATE KEY (FILE='c:\certificates\TargetServer.pvk',decryption by password='PrivateKeyPassword')
ACTIVE FOR BEGIN_DIALOG = ON
GO
--Create the login and the user to own a certificate.
CREATE LOGIN remcert WITH PASSWORD = 'LoginPassword'
GO
CREATE USER remcert FOR LOGIN remcert
GO
CREATE CERTIFICATE ctfSourceServerMaster
AUTHORIZATION remcert
FROM FILE = 'c:\certificates\SourceServer.cer'
ACTIVE FOR BEGIN_DIALOG = ON
GO
--Create a new endpoint for SQL Server 2005 Service Broker, and set the AUTHENTICATION option to use the ctfSourceServerMaster certificate.
CREATE ENDPOINT BrokerEndpoint
STATE = STARTED
AS TCP
(
LISTENER_PORT = 4022
)
FOR SERVICE_BROKER (AUTHENTICATION = CERTIFICATE ctfTargetServerMaster)
GO
--Grant the required permissions to the remcert login.
GRANT CONNECT TO remcert
GRANT CONNECT ON ENDPOINT::BrokerEndpoint to remcert
GO
--Create a new database for testing.
CREATE DATABASE TargetDB
GO
USE TargetDB
GO
--Configure the dialog security.
--Create a master key in the TargetDB database.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'MasterKeyPassword'
--Create a certificate for the TargetDB database.
CREATE CERTIFICATE ctfDlgTargetServer
FROM FILE = 'c:\certificates\DlgTargetServer.cer'
WITH PRIVATE KEY
(FILE='c:\certificates\DlgTargetServer.pvk',decryption by password='PrivateKeyPassword')
ACTIVE FOR BEGIN_DIALOG = ON
GO
--Create a user for the remcert login that owns a certificate for the dialog security.
CREATE USER remcert for LOGIN remcert
GO
CREATE CERTIFICATE ctfDlgSourceServer
AUTHORIZATION remcert
FROM FILE = 'C:\certificates\DlgSourceServer.cer'
ACTIVE FOR BEGIN_DIALOG = ON
--Create a message type, a contract, a queue, and a service.
CREATE MESSAGE TYPE [mymsg] VALIDATION = NONE
CREATE CONTRACT [mycon] ([mymsg] SENT BY ANY)
CREATE QUEUE [myQueue]
CREATE SERVICE [TargetService] ON QUEUE [myQueue]([mycon])
GO
--Grant the send permission to the user.
GRANT SEND ON SERVICE::[TargetService] TO remcert
GO
--Create a remote service binding for the target service.
CREATE REMOTE SERVICE BINDING [Certificate_Binding_on_server]
TO SERVICE 'SourceService'
WITH USER = remcert,
ANONYMOUS=Off
--Create a route for the target service.
CREATE ROUTE [myRoute]
WITH
SERVICE_NAME = 'SourceService',
address = 'TCP://ServerSrc:4022';
Testen der Remotesicherheit für SQL Server 2005 Service Broker
Nachdem Sie die beiden Instanzen konfiguriert haben, stellen Sie eine Verbindung zu der Instanz auf dem ServerSrc-Server her und führen Sie folgende Anweisungen aus, um den SQL Server 2005 Service Broker-Dienst zu testen:
USE SourceDB
SET NOCOUNT ON
DECLARE @conversationHandle uniqueidentifier
BEGIN TRANSACTION
-- Start dialog.
BEGIN DIALOG @conversationHandle
FROM SERVICE [SourceService]
TO SERVICE 'TargetService'
ON CONTRACT [mycon]
WITH ENCRYPTION = ON, LIFETIME = 600;
-- Send message.
SEND ON CONVERSATION @conversationHandle
MESSAGE TYPE [mymsg] (N'Hi, from '+@@ServerName)
COMMIT
Nachdem Sie diese Anweisungen ausgeführt haben, stellen Sie eine Verbindung zu der Instanz auf dem ServerTag-Server her und führen Sie folgende Anweisungen aus:
SELECT CONVERT(NVARCHAR(MAX),message_body) FROM myQueue
GO
Sie erhalten folgendes Ergebnis:
Weitere Informationen zu SQL Server 2005 Service Broker finden Sie in den folgenden Themen der Onlinedokumentation zu SQL Server 2005:
- Verwalten der Sicherheit (Service Broker)
- Netzwerk- und Remotesicherheit
- Service Broker-Dialogsicherheit
- Festlegen des Dialogsicherheitstyps
- Remotedienstbindungen