Protocolli di rete ed endpoint TDS

Per comunicare con un'applicazione, Motore di database di SQL Server utilizza un formato di comunicazione Microsoft denominato pacchetto TDS (Tabular Data Stream). Il livello del protocollo SNI (SQL Server Network Interface) di rete, che sostituisce le librerie di rete per SQL Server 2000 e Microsoft Data Access Components (MDAC), incapsula il pacchetto TDS all'interno di un protocollo di comunicazione standard, ad esempio TCP/IP o Named Pipes. Il livello del protocollo SNI è comune al Motore di database e a SQL Server Native Client. Questo livello non viene configurato direttamente. Il server e SQL Server Native Client sono invece configurati per l'utilizzo di un protocollo di rete. Successivamente, il Motore di database e SQL Server Native Client utilizzano automaticamente le impostazioni del protocollo appropriato. Il server crea un oggetto di SQL Server denominato endpoint TDS per ogni protocollo di rete. Nel server, gli endpoint TDS vengono installati durante l'installazione di SQL Server.

In questo argomento vengono descritti la creazione e l'utilizzo degli endpoint TDS nel server. Per ulteriori informazioni sulla configurazione del server, vedere Configurazione di protocolli di rete server e di librerie di rete.

Nel computer client, è necessario installare SQL Server Native Client e configurarlo per l'utilizzo di un protocollo di rete attivato nel server. Per ulteriori informazioni sui clienti, vedere Configurazione dei protocolli di rete client.

Attivazione dei protocolli server dopo l'installazione

Di norma, i protocolli di rete del sistema operativo sottostante, ad esempio TCP/IP, sono già installati nel client e nel server. I protocolli di rete vengono in genere installati durante l'installazione di Windows e non durante l'installazione di SQL Server. Se il protocollo di rete necessario non è disponibile e configurato nel server, il Motore di database non verrà avviato. Se il protocollo di rete necessario non è disponibile e configurato nel client, non sarà possibile utilizzare la libreria di rete.

[!NOTA]

Nelle parti successive di questo argomento, per "attivazione di un protocollo" si intende la relativa attivazione per SQL Server e non per il sistema operativo.

Spesso, i protocolli di rete necessari per comunicare con SQL Server da un altro computer non vengono attivati per SQL Server durante l'installazione. Per connettersi da un computer client, pertanto, potrebbe essere necessario attivare il protocollo TCP/IP, Named Pipes o VIA. Il protocollo Shared Memory viene attivato per impostazione predefinita in tutte le installazioni, ma è possibile utilizzarlo solo per connettersi a Motore di database da un'applicazione client nello stesso computer. Per informazioni sui protocolli di rete attivati per un tipo di installazione specifico, vedere Configurazione di rete predefinita di SQL Server.

Per abilitare i protocolli di rete, utilizzare Gestione configurazione SQL Server. In alternativa, è possibile attivare i protocolli durante l'installazione tramite le opzioni del prompt dei comandi. Per ulteriori informazioni, vedere Procedura: Installazione di SQL Server 2008 dal prompt dei comandi.

Dopo l'installazione e la configurazione delle connessioni di rete, SQL Server può rimanere in attesa contemporaneamente su più protocolli di rete server.

Definizione degli endpoint TDS

Un endpoint TDS è l'oggetto di SQL Server che rappresenta il punto di comunicazione tra SQL Server e un client. SQL Server crea automaticamente un endpoint per ognuno dei quattro protocolli supportati da SQL Server. Per impostazione predefinita, tutti gli utenti dispongono dell'accesso agli endpoint quando i protocolli sono attivati. Se un protocollo di rete non è attivato, l'endpoint esiste comunque ma non è possibile utilizzarlo. Un endpoint aggiuntivo viene creato per la connessione amministrativa dedicata (DAC, Dedicated Administrator Connection), ma può essere utilizzato solo dai membri del ruolo predefinito del server sysadmin.

SQL Server genera un nome univoco per ogni endpoint TDS. Gli endpoint creati automaticamente sono illustrati nella tabella seguente:

Descrizione

Nome endpoint

Shared Memory

TSQL LocalMachine

Named Pipes

TSQL Named Pipes

TCP/IP

TSQL Default TCP

VIA

TSQL Default VIA

DAC

Dedicated Admin Connection

HTTP

HyperText Transport Protocol

Per i protocolli Named Pipes e Shared Memory, è consentito un unico endpoint per ogni istanza. Per questi tipi di protocolli non sono disponibili endpoint configurabili. Per TCP/IP e VIA è disponibile un endpoint predefinito, ma è possibile creare endpoint aggiuntivi. Anche gli endpoint HTTP vengono creati dall'utente e non vengono visualizzati in Gestione configurazione SQL Server.

Negli endpoint di sistema è possibile modificare solo il proprietario e lo stato tramite l'istruzione ALTER ENDPOINT. Non è possibile disattivare gli endpoint predefiniti, ma è possibile interromperli e avviarli. Un endpoint interrotto rimane ancora in attesa, ma rifiuta e chiude le nuove connessioni.

[!NOTA]

Per impostazione predefinita, i client vengono configurati per provare tutti i protocolli fino a individuarne uno funzionante. Se il protocollo TCP/IP è disattivato, i client passano al protocollo successivo. Se TCP/IP è attivato ma l'endpoint viene interrotto, il tentativo di connessione non viene rifiutato, in modo che il client non provi altri protocolli, ma non è possibile utilizzare la connessione interrotta. In tal caso, è necessario connettersi esplicitamente a un endpoint attivo.

In genere, le porte TCP dinamiche si connettono all'endpoint TCP predefinito.

Impostazioni del protocollo nel Registro di sistema

Le impostazioni relative agli endpoint TDS vengono registrate nel Registro di sistema. È consigliabile che gli utenti creino o modifichino gli endpoint tramite istruzioni Transact-SQL e attivino o disattivino i protocolli tramite Gestione configurazione SQL Server, che avvia e interrompe gli endpoint.

Quando l'utente modifica le impostazioni del protocollo nel Registro di sistema, le modifiche apportate non influiscono sui dati. Il Registro di sistema è separato dai metadati.

Associazione di una connessione utente a un endpoint

Durante la connessione al Motore di database, SQL Server associa la connessione a un endpoint specifico e valuta se all'account di accesso che esegue la connessione è stata concessa l'autorizzazione per l'utilizzo dell'endpoint. Le connessioni vengono associate nel modo seguente:

  • Le connessioni Shared Memory utilizzano l'endpoint TSQL LocalMachine.

  • Le connessioni Named Pipes utilizzano l'endpoint TSQL Named Pipes.

  • Le connessioni amministrative dedicate utilizzano l'endpoint Dedicated Admin Connection.

  • Per impostazione predefinita, le connessioni TCP utilizzano l'endpoint TSQL Default TCP. Se viene creato un nuovo endpoint TCP definito dall'utente per una porta TCP specifica, le connessioni a tale porta verranno associate al nuovo endpoint. Se viene creato un nuovo endpoint TCP/TSQL utilizzando IP_ANY come porta, le connessioni TCP verranno associate al nuovo endpoint.

  • Le connessioni VIA vengono considerate esattamente come le connessioni TCP.

Il funzionamento degli endpoint definiti dall'utente è identico a quello degli endpoint predefiniti. Quando viene creato un endpoint per un indirizzo IP (o per tutti gli indirizzi IP, utilizzando IP_ANY) e una porta TCP specifica, l'autorizzazione per la connessione all'endpoint viene concessa agli utenti tramite un processo denominato provisioning. Il provisioning viene mantenuto indipendentemente dal fatto che il server rimanga effettivamente in attesa o meno sia sull'indirizzo IP che sulla porta TCP. La corrispondenza tra un endpoint e una connessione a un indirizzo IP e a una porta TCP viene eseguita nel modo seguente:

  1. Se l'indirizzo IP e la porta TCP corrispondono esattamente all'indirizzo IP e alla porta TCP di un endpoint, viene utilizzato tale endpoint.

  2. Se non viene rilevata una corrispondenza esatta, la porta TCP viene confrontata con tutti gli endpoint IP_ANY e, se ne viene individuato uno che rimane in attesa sulla porta TCP, viene utilizzato tale endpoint.

  3. Se non viene rilevata alcuna corrispondenza esatta per la porta, viene utilizzato l'endpoint TCP predefinito.

Il processo di associazione della connessione comporta la selezione di almeno un singolo endpoint. Per tale endpoint, viene verificata la relativa autorizzazione per la connessione. Se l'utente non dispone dell'autorizzazione relativa a tale endpoint, il processo non esegue la ricerca dell'endpoint successivo.

Esempi: Associazione di connessioni utente ed endpoint

Nell'esempio seguente viene illustrato l'utilizzo dell'indirizzo IP e della porta IP per la selezione di un endpoint. Si supponga che il server sia configurato per rimanere in attesa sugli indirizzi IP e sulle porte TCP seguenti:

127.0.0.1:1533

Si supponga inoltre che vengano stabiliti gli endpoint TCP seguenti:

Nome endpoint

Valori configurati

Loopback

LISTENER_IP= 127.0.0.1 e LISTENER_PORT = 1533

Remoto

LISTENER_IP = ALL e LISTENER_PORT = 1533

TSQL Default TCP

Non collegato a nessun indirizzo IP o porta

Le connessioni possibili sono tre:

  • Se un client esegue una connessione TCP a 127.0.0.1:1533, alla sessione viene associato l'endpoint Loopback, in quanto esiste una corrispondenza esatta tra l'endpoint Loopback e l'indirizzo IP e la porta TCP.

  • Se un client esegue una connessione TCP a 251.40.20.151:1533, non viene rilevata alcuna corrispondenza esatta tra un endpoint e l'indirizzo IP e la porta TCP, ma l'endpoint Remoto è disponibile per la connessione in quanto rimane in attesa su qualsiasi indirizzo IP e sulla porta 1533. Se l'account di accesso che esegue la connessione non dispone dell'autorizzazione relativa all'endpoint Remoto, il processo avrà esito negativo. Non viene eseguito un tentativo di connessione agli altri endpoint possibili, ad esempio TSQL Default TCP, per i quali l'account di accesso potrebbe disporre della relativa autorizzazione.

  • Se un client esegue una connessione TCP a 251.40.20.151:1433, non viene rilevata né una corrispondenza esatta tra un endpoint e l'indirizzo IP e la porta TCP, né una corrispondenza tra la porta TCP 1533 e un indirizzo IP, ma l'endpoint TSQL Default TCP è disponibile per la connessione in quanto rimane in attesa su qualsiasi indirizzo IP e su qualsiasi porta.

Aggiornamento e/o installazione

Per impostazione predefinita, tutti gli utenti dispongono dell'accesso agli endpoint TDS, ad eccezione dell'endpoint della connessione amministrativa dedicata. Poiché tali endpoint vengono creati internamente dal server, non esiste alcun proprietario e non è possibile associarli a un account specifico.

Gestione degli endpoint con Transact-SQL

Gli endpoint vengono creati e gestiti tramite Transact-SQL. In particolare, vengono creati ed eliminati tramite le istruzioni CREATE ENDPOINT e DROP ENDPOINT. Sono inoltre disponibili istruzioni per controllare gli endpoint, modificarli e diventarne proprietario.

Per connettersi a un'istanza di SQL Server tramite gli endpoint Transact-SQL, gli utenti devono disporre dell'autorizzazione CONNECT per un endpoint e dell'autorizzazione globale per SQL Server per eseguire l'accesso. L'autorizzazione per la connessione agli endpoint predefiniti viene concessa implicitamente agli utenti al momento della creazione degli account di accesso. L'accesso agli endpoint viene gestito tramite le istruzioni GRANT | DENY | REVOKE CONNECT ON ENDPOINT.

Quando viene creato un nuovo endpoint TCP, SQL Server revoca automaticamente tutte le autorizzazioni esistenti per l'endpoint TSQL Default TCP. Per un esempio di creazione di un nuovo endpoint TCP, vedere Procedura: Configurazione del Motore di database per l'attesa su più porte TCP.

  • Per limitare l'accesso a un endpoint, l'amministratore può negare l'autorizzazione al gruppo EVERYONE tramite l'istruzione DENY CONNECT e quindi concedere l'autorizzazione a singoli utenti o ruoli specifici tramite l'istruzione GRANT CONNECT.

  • Per ripristinare lo stato originale delle autorizzazioni, è necessario concedere l'autorizzazione al gruppo PUBLIC tramite l'istruzione GRANT CONNECT.

  • Per definire un endpoint per un'applicazione specifica, è necessario negare le autorizzazioni a tutti gli utenti, ad eccezione di quelli dell'applicazione, tramite l'istruzione DENY CONNECT.

Nota sulla protezioneNota sulla protezione

L'autorizzazione per l'utilizzo di un endpoint è associata al nome dell'endpoint. Se si modifica il nome di un endpoint, le restrizioni di protezione (ad esempio le istruzioni DENY CONNECT) non verranno più applicate correttamente. Il nome di un endpoint viene modificato quando viene modificata la porta. Se SQL Server è in attesa su porte dinamiche, è possibile che la porta venga modificata, causando la modifica del nome dell'endpoint e l'eliminazione delle autorizzazioni per l'endpoint associato. Al fine di evitare tale rischio per la protezione, non impostare autorizzazioni personalizzate per gli endpoint associati alle porte dinamiche e non modificare l'ordine di occorrenza di un endpoint TCP/IP nel Registro di sistema.

Per ulteriori informazioni su come impostare la protezione per gli endpoint, vedere GRANT - autorizzazioni per endpoint (Transact-SQL).