Condividi tramite


sp_addlinkedsrvlogin (Transact-SQL)

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.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQL

Sintassi

sp_addlinkedsrvlogin [ @rmtsrvname = ] 'rmtsrvname' 
     [ , [ @useself = ] 'TRUE' | 'FALSE' | NULL ] 
     [ , [ @locallogin = ] 'locallogin' ] 
     [ , [ @rmtuser = ] 'rmtuser' ] 
     [ , [ @rmtpassword = ] 'rmtpassword' ] 

Argomenti

  • [ @rmtsrvname = ] 'rmtsrvname'
    Nome di un server collegato a cui viene applicato il mapping degli account di accesso. rmtsrvname è di tipo sysname e non prevede alcun valore predefinito.

  • [ @useself = ] 'TRUE' | 'FALSE' | NULL
    Determina se la connessione a rmtsrvname deve essere eseguita rappresentando account di accesso locali o inviando esplicitamente un account di accesso e una password. Il tipo di dati è varchar(8) e il valore predefinito è TRUE.

    TRUE specifica che gli account di accesso utilizzano le rispettive credenziali per la connessione a rmtsrvname e che gli argomenti rmtuser e rmtpassword vengono ignorati. FALSE specifica che per la connessione a rmtsrvname per l'account di accesso specificato in locallogin vengono utilizzati gli argomenti rmtuser e rmtpassword. Inoltre, se gli argomenti rmtuser e rmtpassword sono impostati su NULL, non vengono utilizzati account di accesso o password per la connessione al server collegato.

  • [ @locallogin = ] 'locallogin'
    Account di accesso del server locale. locallogin è di tipo sysname e il valore predefinito è NULL, ad indicare che questa voce viene applicata a tutti gli account di accesso locali che si connettono al server rmtsrvname. Se è diverso da NULL, locallogin può essere un account di accesso di SQL Server o di Windows. È necessario che l'account di accesso di Windows disponga dell'accesso a SQL Server ottenuto tramite concessione diretta o in seguito all'appartenenza a un gruppo di Windows che dispone dell'accesso.

  • [ @rmtuser = ] 'rmtuser'
    Account di accesso remoto utilizzato per la connessione a rmtsrvname quando @useself è FALSE. Quando il server remoto è un'istanza di SQL Server che non utilizza l'autenticazione di Windows, rmtuser è un account di accesso di SQL Server. rmtuser è di tipo sysname e il valore predefinito è NULL.

  • [ @rmtpassword = ] 'rmtpassword'
    Password associata a rmtuser. rmtpassword è di tipo sysname e il valore predefinito è NULL.

Valori di codice restituiti

0 (esito positivo) o 1 (esito negativo)

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. Per specificare le credenziali dell'account di accesso utilizzate nel server locale per l'accesso al server collegato, utilizzare la procedura sp_addlinkedsrvlogin.

Nota

Per creare piani di query ottimali quando si utilizza una tabella in un server collegato, è necessario che Query Processor ottenga le 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 essere il proprietario della tabella oppure un membro del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_owner o db_ddladmin sul server collegato.

Un mapping predefinito tra tutti gli account di accesso del server locale e gli account di accesso remoti del server collegato viene creato automaticamente tramite la procedura sp_addlinkedserver. In base al mapping predefinito, in SQL Server vengono utilizzate le credenziali dell'account di accesso locale dell'utente durante la connessione al server collegato. Ciò equivale all'esecuzione della procedura sp_addlinkedsrvlogin con @useself impostato su true per il server collegato, senza specificare il nome utente locale. Utilizzare la procedura 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, utilizzare la procedura sp_droplinkedsrvlogin.

Anziché utilizzare la procedura sp_addlinkedsrvlogin per creare un mapping predefinito agli account di accesso, per la connessione a un server collegato SQL Server può utilizzare automaticamente le credenziali di sicurezza di Windows (nome di accesso e password di Windows) di un utente che invia la query se sussistono le seguenti condizioni:

  • Un utente si connette a SQL Server in base all'autenticazione di Windows.

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

  • Il provider supporta l'autenticazione di Windows, ad esempio SQL Servereseguito in Windows.

Nota

Non è necessario attivare la delega per scenari a hop singolo ma è necessario attivarla per gli scenari a più hop.

Dopo che l'autenticazione è stata eseguita dal server collegato in base ai mapping definiti con la procedura sp_addlinkedsrvlogin eseguita nell'istanza locale di SQL Server, le autorizzazioni per singoli oggetti nel database remoto sono determinate dal server collegato, non dal server locale.

Non è possibile eseguire la procedura sp_addlinkedsrvlogin all'interno di una transazione definita dall'utente.

Autorizzazioni

È richiesta l'autorizzazione ALTER ANY LOGIN nel server.

Esempi

A. Connessione di tutti gli account di accesso locali al server collegato utilizzando le relative credenziali

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'

oppure

EXEC sp_addlinkedsrvlogin 'Accounts', 'true'

Nota

Se ci sono mapping espliciti creati per account di accesso individuali, essi hanno la precedenza su ogni eventuale mapping globale per quel server collegato.

B. Connessione di un account di accesso specifico al server collegato utilizzando 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'
Nota sulla sicurezzaNota sulla sicurezza

In questo esempio non viene utilizzata l'autenticazione di Windows. Le password verranno trasmesse senza essere crittografate. Le password possono essere visibili nelle definizioni delle origini dei dati e negli script salvati su disco, in copie di backup e in 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.