sp_addlinkedsrvlogin (Transact-SQL)sp_addlinkedsrvlogin (Transact-SQL)

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

Crea o aggiorna un mapping tra un account di accesso nell'istanza locale di SQL ServerSQL Server e un account di sicurezza in un server remoto.Creates or updates a mapping between a login on the local instance of SQL ServerSQL Server and a security account on a remote server.

Icona di collegamento a un argomentoConvenzioni della sintassi Transact-SQLTopic link icon Transact-SQL Syntax Conventions

SintassiSyntax


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

ArgomentiArguments

[ @rmtsrvname = ] 'rmtsrvname'[ @rmtsrvname = ] 'rmtsrvname'
Nome di un server collegato a cui viene applicato il mapping dell'account di accesso.Is the name of a linked server that the login mapping applies to. rmtsrvname è sysname, non prevede alcun valore predefinito.rmtsrvname is sysname, with no default.

[ @useself = ] 'TRUE' | 'FALSE' | 'NULL'[ @useself = ] 'TRUE' | 'FALSE' | 'NULL'
Determina se la connessione a rmtsrvname dalla rappresentazione di un account di accesso locali o inviando esplicitamente un account di accesso e una password.Determines whether to connect to rmtsrvname by impersonating local logins or explicitly submitting a login and password. Il tipo di dati è varchar (8), con un valore predefinito è TRUE.The data type is varchar(8), with a default of TRUE.

Il valore TRUE specifica che gli account di accesso utilizzare le proprie credenziali per connettersi a rmtsrvname, con la rmtuser e rmtpassword argomenti verrà ignorati.A value of TRUE specifies that logins use their own credentials to connect to rmtsrvname, with the rmtuser and rmtpassword arguments being ignored. FALSE specifica che il rmtuser e rmtpassword argomenti vengono utilizzati per connettersi a rmtsrvname per l'oggetto specificato locallogin .FALSE specifies that the rmtuser and rmtpassword arguments are used to connect to rmtsrvname for the specified locallogin. Se rmtuser e rmtpassword sono anche impostato su NULL, nessun account di accesso o la password viene utilizzata per connettersi al server collegato.If rmtuser and rmtpassword are also set to NULL, no login or password is used to connect to the linked server.

[ @locallogin = ] 'locallogin'[ @locallogin = ] 'locallogin'
Account di accesso per il server locale.Is a login on the local server. locallogin è sysname, con un valore predefinito è NULL.locallogin is sysname, with a default of NULL. NULL indica che questa voce viene applicata a tutti gli account di accesso locale che si connettono a rmtsrvname.NULL specifies that this entry applies to all local logins that connect to rmtsrvname. Se non è NULL, locallogin può essere un SQL ServerSQL Server account di accesso o un account di accesso di Windows.If not NULL, locallogin can be a SQL ServerSQL Server login or a Windows login. È necessario che l'account di accesso di Windows disponga dell'accesso a SQL ServerSQL Server ottenuto tramite concessione diretta o in seguito all'appartenenza a un gruppo di Windows che dispone dell'accesso.The Windows login must have been granted access to SQL ServerSQL Server either directly, or through its membership in a Windows group granted access.

[ @rmtuser = ] 'rmtuser'[ @rmtuser = ] 'rmtuser'
Account di accesso remoto utilizzato per connettersi a rmtsrvname quando @useself è FALSE.Is the remote login used to connect to rmtsrvname when @useself is FALSE. Quando il server remoto è un'istanza di SQL ServerSQL Server che non utilizza l'autenticazione di Windows, rmtuser è un SQL ServerSQL Server account di accesso.When the remote server is an instance of SQL ServerSQL Server that does not use Windows Authentication, rmtuser is a SQL ServerSQL Server login. rmtuser è sysname, con un valore predefinito è NULL.rmtuser is sysname, with a default of NULL.

[ @rmtpassword = ] 'rmtpassword'[ @rmtpassword = ] 'rmtpassword'
La password associata a rmtuser.Is the password associated with rmtuser. rmtpassword è sysname, con un valore predefinito è NULL.rmtpassword is sysname, with a default of NULL.

Valori restituitiReturn Code Values

0 (esito positivo) o 1 (esito negativo)0 (success) or 1 (failure)

OsservazioniRemarks

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.When a user logs on to the local server and executes a distributed query that accesses a table on the linked server, the local server must log on to the linked server on behalf of the user to access that table. Per specificare le credenziali dell'account di accesso utilizzate nel server locale per l'accesso al server collegato, utilizzare la procedura sp_addlinkedsrvlogin.Use sp_addlinkedsrvlogin to specify the login credentials that the local server uses to log on to the linked server.

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.To create the best query plans when you are using a table on a linked server, the query processor must have data distribution statistics from the linked server. 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.Users that have limited permissions on any columns of the table might not have sufficient permissions to obtain all the useful statistics, and might receive a less efficient query plan and experience poor performance. Se il server collegato è un'istanza di SQL ServerSQL 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.If the linked server is an instance of SQL ServerSQL Server, to obtain all available statistics, the user must own the table or be a member of the sysadmin fixed server role, the db_owner fixed database role, or the db_ddladmin fixed database role on the linked server. In SQL Server 2012 SP1 le restrizioni delle autorizzazioni vengono modificate per ottenere le statistiche e gli utenti con l'autorizzazione SELECT possono accedere alle statistiche disponibili tramite DBCC SHOW_STATISTICS.SQL Server 2012 SP1 modifies the permission restrictions for obtaining statistics and allows users with SELECT permission to access statistics available through DBCC SHOW_STATISTICS. Per ulteriori informazioni, vedere la sezione autorizzazioni DBCC SHOW_STATISTICS ( Transact-SQL ) .For more information, see the Permissions section of DBCC SHOW_STATISTICS (Transact-SQL).

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.A default mapping between all logins on the local server and remote logins on the linked server is automatically created by executing sp_addlinkedserver. In base al mapping predefinito, in SQL ServerSQL Server vengono utilizzate le credenziali dell'account di accesso locale dell'utente durante la connessione al server collegato.The default mapping states that SQL ServerSQL Server uses the user credentials of the local login when connecting to the linked server on behalf of the login. Ciò equivale all'esecuzione della procedura sp_addlinkedsrvlogin con @useself impostato su true per il server collegato, senza specificare un nome utente locale.This is equivalent to executing sp_addlinkedsrvlogin with @useself set to true for the linked server, without specifying a local user name. Utilizzare la procedura sp_addlinkedsrvlogin solo per modificare il mapping predefinito o per aggiungere nuovi mapping per account di accesso locali specifici.Use sp_addlinkedsrvlogin only to change the default mapping or to add new mappings for specific local logins. Per eliminare il mapping predefinito o qualsiasi altro mapping, utilizzare la procedura sp_droplinkedsrvlogin.To delete the default mapping or any other mapping, use 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 ServerSQL 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:Instead of having to use sp_addlinkedsrvlogin to create a predetermined login mapping, SQL ServerSQL Server can automatically use the Windows security credentials (Windows login name and password) of a user issuing the query to connect to a linked server when all the following conditions exist:

  • Un utente si connette a SQL ServerSQL Server in base all'autenticazione di Windows.A user is connected to SQL ServerSQL Server by using Windows Authentication Mode.

  • È disponibile la delega dell'account di sicurezza nel client e nel server di origine.Security account delegation is available on the client and sending server.

  • Il provider supporta l'autenticazione di Windows, ad esempio SQL ServerSQL Servereseguito in Windows.The provider supports Windows Authentication Mode; for example, SQL ServerSQL Server running on Windows.

Nota

Non è necessario abilitare la delega per scenari a hop singolo ma è necessario abilitarla per gli scenari a più hop.Delegation does not have to be enabled for single-hop scenarios, but it is required for multiple-hop scenarios.

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 ServerSQL Server, le autorizzazioni per singoli oggetti nel database remoto sono determinate dal server collegato, non dal server locale.After the authentication has been performed by the linked server by using the mappings that are defined by executing sp_addlinkedsrvlogin on the local instance of SQL ServerSQL Server, the permissions on individual objects in the remote database are determined by the linked server, not the local server.

Non è possibile eseguire la procedura sp_addlinkedsrvlogin all'interno di una transazione definita dall'utente.sp_addlinkedsrvlogin cannot be executed from within a user-defined transaction.

PermissionsPermissions

È richiesta l'autorizzazione ALTER ANY LOGIN nel server.Requires ALTER ANY LOGIN permission on the server.

EsempiExamples

A.A. Connessione di tutti gli account di accesso locali al server collegato utilizzando le relative credenzialiConnecting all local logins to the linked server by using their own user credentials

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.The following example creates a mapping to make sure that all logins to the local server connect through to the linked server Accounts by using their own user credentials.

EXEC sp_addlinkedsrvlogin 'Accounts';  

OppureOr

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.If there are explicit mappings created for individual logins, they take precedence over any global mappings that may exist for that linked server.

B.B. Connessione di un account di accesso specifico al server collegato utilizzando credenziali utente diverseConnecting a specific login to the linked server by using different user credentials

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.The following example creates a mapping to make sure that the Windows user Domain\Mary connects through to the linked server Accounts by using the login MaryP and password d89q3w4u.

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

Importante

In questo esempio non viene utilizzata l'autenticazione di Windows.This example does not use Windows Authentication. Le password verranno trasmesse senza essere crittografate.Passwords will be transmitted unencrypted. 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.Passwords may be visible in data source definitions and scripts that are saved to disk, in backups, and in log files. Non utilizzare mai una password di amministratore per questo tipo di connessioni.Never use an administrator password in this kind of connection. Per ulteriori informazioni sulla sicurezza specifiche al proprio ambiente, consultare l'amministratore di rete.Consult your network administrator for security guidance specific to your environment.

Vedere ancheSee Also

Viste del catalogo di server collegati ( Transact-SQL ) Linked Servers Catalog Views (Transact-SQL)
sp_addlinkedserver (Transact-SQL) sp_addlinkedserver (Transact-SQL)
la procedura sp_droplinkedsrvlogin ( Transact-SQL ) sp_droplinkedsrvlogin (Transact-SQL)
Stored procedure di sistema (Transact-SQL)System Stored Procedures (Transact-SQL)