sp_addlinkedsrvlogin (Transact-SQL)

Si applica a:SQL Server

Crea o aggiorna un mapping tra un account di accesso nell'istanza locale di SQL Server e un account di sicurezza in un server remoto.

Convenzioni di sintassi Transact-SQL

Sintassi

sp_addlinkedsrvlogin
    [ @rmtsrvname = ] N'rmtsrvname'
    [ , [ @useself = ] 'useself' ]
    [ , [ @locallogin = ] N'locallogin' ]
    [ , [ @rmtuser = ] N'rmtuser' ]
    [ , [ @rmtpassword = ] N'rmtpassword' ]
[ ; ]

Argomenti

[ @rmtsrvname = ] N'rmtsrvname'

Nome di un server collegato a cui si applica il mapping dell'account di accesso. @rmtsrvname è sysname, senza impostazione predefinita.

[ @useself = ] 'useself'

Determina se connettersi a rmtsrvname rappresentando gli account di accesso locali o inviando in modo esplicito un account di accesso e una password. @useself è varchar(8), con il valore predefinito true.

  • Valore di true specifica che gli account di accesso usano le proprie credenziali per connettersi a @rmtsrvname, con gli argomenti @rmtuser e @rmtpassword ignorati.
  • falsespecifica che gli argomenti @rmtuser e @rmtpassword vengono utilizzati per connettersi a @rmtsrvname per il @locallogin specificato.

Se @rmtuser e @rmtpassword sono impostati su NULL, non viene usato alcun account di accesso o password per connettersi al server collegato.

[ @locallogin = ] N'locallogin'

Un account di accesso nel server locale. @locallogin è sysname, con un valore predefinito .NULL NULL specifica che questa voce si applica a tutti gli account di accesso locali che si connettono a @rmtsrvname. In caso contrario NULL, @locallogin può essere un account di accesso di SQL Server o un account di Windows. L'account di Windows deve avere accesso diretto a SQL Server o tramite l'appartenenza a un gruppo di Windows.

[ @rmtuser = ] N'rmtuser'

Account di accesso remoto usato per connettersi a @rmtsrvname quando @useself è false. @rmtuser è sysname, con un valore predefinito .NULL Quando il server remoto è un'istanza di SQL Server che non usa l'autenticazione di Windows, @rmtuser è un account di accesso di SQL Server.

[ @rmtpassword = ] N'rmtpassword'

Password associata a @rmtuser. @rmtpassword è sysname, con il valore predefinito NULL.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Osservazioni:

Quando un utente accede al server locale ed esegue una query distribuita che accede a una tabella del server collegato, il server locale deve accedere al server collegato per parte dell'utente che desidera accedere a tale tabella. Usare sp_addlinkedsrvlogin per specificare le credenziali usate dal server locale per accedere al server collegato.

Nota

Per creare i piani di query migliori quando si usa una tabella in un server collegato, Query Processor deve disporre di statistiche di distribuzione dei dati dal server collegato. Gli utenti con autorizzazioni limitate per qualsiasi colonna della tabella potrebbero non disporre delle autorizzazioni sufficienti per ottenere tutte le statistiche utili, nonché ricevere un piano di query meno efficiente e riscontrare un peggioramento delle prestazioni. Se il server collegato è un'istanza di SQL Server, per ottenere tutte le statistiche disponibili, l'utente deve possedere la tabella o essere membro del ruolo predefinito del server sysadmin , il ruolo predefinito del database db_owner o il ruolo predefinito del database db_ddladmin nel server collegato. SQL Server 2012 SP1 (11.0.3x) modifica le restrizioni di autorizzazione per ottenere statistiche e consente agli utenti con autorizzazione edizione Standard LECT di accedere alle statistiche disponibili tramite DBCC SHOW_STATISTICS. Per altre informazioni, vedere la sezione Autorizzazioni di DBCC SHOW_STATISTICS (Transact-SQL).

Un mapping predefinito tra tutti gli account di accesso nel server locale e gli account di accesso remoti nel server collegato viene creato automaticamente eseguendo sp_addlinkedserver. Il mapping predefinito indica che SQL Server usa le credenziali utente dell'account di accesso locale durante la connessione al server collegato per conto dell'account di accesso. Equivale all'esecuzione sp_addlinkedsrvlogin con @useself impostato su true per il server collegato, senza specificare un nome utente locale. Usare sp_addlinkedsrvlogin solo per modificare il mapping predefinito o per aggiungere nuovi mapping per account di accesso locali specifici. Per eliminare il mapping predefinito o qualsiasi altro mapping, usare sp_droplinkedsrvlogin.

Anziché dover usare sp_addlinkedsrvlogin per creare un mapping di accesso predeterminato, SQL Server può usare automaticamente le credenziali di sicurezza di Windows (nome e password di accesso di Windows) di un utente che esegue la query per connettersi a un server collegato quando esistono tutte le condizioni seguenti:

  • Un utente è connesso a SQL Server tramite la modalità di autenticazione di Windows.

  • È disponibile la delega dell'account di sicurezza nel client e nel server di origine.

  • Il provider supporta la modalità di autenticazione di Windows; Ad esempio, SQL Server in esecuzione in Windows.

Nota

La delega non deve essere abilitata per gli scenari a hop singolo, ma è necessaria per scenari con più hop.

Dopo che l'autenticazione è stata eseguita dal server collegato usando i mapping definiti dall'esecuzione sp_addlinkedsrvlogin nell'istanza locale di SQL Server, le autorizzazioni per singoli oggetti nel database remoto vengono determinate dal server collegato, non dal server locale.

sp_addlinkedsrvlogin non può essere eseguito dall'interno di una transazione definita dall'utente.

Autorizzazioni

È richiesta l'autorizzazione ALTER ANY LOGIN nel server.

Esempi

R. Connessione tutti gli account di accesso locali al server collegato usando le proprie credenziali utente

Nell'esempio seguente viene creato un mapping per assicurare che tutti gli account di accesso del server locale si connettano al server collegato Accounts utilizzando le proprie credenziali.

EXEC sp_addlinkedsrvlogin 'Accounts';

O

EXEC sp_addlinkedsrvlogin 'Accounts', 'true';

Nota

Se sono presenti mapping espliciti creati per singoli account di accesso, hanno la precedenza su tutti i mapping globali che potrebbero esistere per il server collegato.

B. Connessione un account di accesso specifico al server collegato usando credenziali utente diverse

Nell'esempio seguente viene creato un mapping per assicurare che l'utente di Windows Domain\Mary si connetta al server collegato Accounts tramite l'account MaryP e la password d89q3w4u.

EXEC sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', 'd89q3w4u';

Attenzione

Questo esempio non usa l'autenticazione di Windows. Le password verranno trasmesse senza essere crittografate. Le password potrebbero essere visibili nelle definizioni e negli script dell'origine dati salvati su disco, nei backup e nei file di log. Non utilizzare mai una password di amministratore per questo tipo di connessioni. Per ulteriori informazioni sulla sicurezza specifiche al proprio ambiente, consultare l'amministratore di rete.