Domanda

Ci sono eventuali buone opzioni per il collegamento di due 2008 istanze di SQL Server tramite Service Broker se nessuno di questi server sono in un dominio, ma abbiamo il pieno controllo dei dati di accesso e le credenziali?

Stiamo pensando di utilizzare questa tecnologia per il consolidamento dei dati a livello aziendale, ma i nostri server correre ai luoghi del cliente e non sono configurati come membri di qualsiasi dominio. Stiamo cercando l'opzione meno dolore per arrivare Service Broker comunicare in questo ambiente.

È stato utile?

Soluzione

Si utilizza certificati, che è l'opzione di autenticazione Service Broker progettato specificamente per uno scenario come il vostro. Vedere Come certificato basato il lavoro di autenticazione . Quando gli endpoint sono configurati con l'autenticazione dei certificati in base alla handhsake conterrà uno scambio di autenticazione basato SSPI Schannel (meglio noto come SSL o TLS). Il certificato risultante utilizzato dal peer viene utilizzato per autorizzare la connessione di fiducia derivata dalla distribuzione dei certificati. Ciò significa che i certificati utilizzati non vengono convalidati per una proprietà specifica come nel ' https://example.com 'caso 'example.com' deve EA OID specifica sul certificato e una firma authorithy di fiducia, ma invece se il certificato viene distribuito (es. trovato nel database master), il proprietario del certificato schierato è l'identità. Questo consente di utilizzare certificati autofirmati in modo sicuro con la radice di fiducia nella distribuzione (es. L'amministratore di sistema), non un authorithy (es. Verisign). Questo è un probabilmente più informazioni del necessario :)

L'essenza di esso va in questo modo:

-------------------------------------
-- connect to server
-------------------------------------
use master;
go
create master key encryption by password = '...';
create certificate [<servername>]
  with subject = '<servername>'
  , start_date = '20100216'
  , expiry_date = '20150216';

create endpoint broker 
state = started
as tcp (listener_port = 4022)
for service_broker (authentication = certificate [<servername>]);

-- Export the public key to disk
backup certificate [<servername>]
to file = '\\someshare\<servername>.cer';

--------------------------------
-- connect to client
--------------------------------
use master;
go
create master key encryption by password = '...';
create certificate [<clientname>]
  with subject = '<clientname>'
  , start_date = '20100216'
  , expiry_date = '20150216';

create endpoint broker 
state = started
as tcp (listener_port = 4022)
for service_broker (authentication = certificate [<clientname>]);

-- Export the public key to disk
backup certificate [<clientname>]
to file = '\\someshare\<clientname>.cer';

--create an identity for server and import the server's certificate:
create login [<servername>] with password = '...';
alter login [<servername>] disable;
create user [<servername>];

create certificate [<servername>]
  authorization [<servername>]
  from file = '\\someshare\<servername>.cer';

--authorize <servername> to connect on the broker endpoint 
grant connect on endpoint::broker to [<servername>];

---------------------------------------
-- connect to the server
---------------------------------------

--create an identity for client and import the client's certificate:
create login [<clientname>] with password = '...';
alter login [<clientname>] disable;
create user [<clientname>];

create certificate [<clientname>]
  authorization [<clientname>]
  from file = '\\someshare\<clientname>.cer';

--authorize <clientname> to connect on the broker endpoint 
grant connect on endpoint::broker to [<clientname>];
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top