2015-08-19 14 views
6

Ho un SQL Server 2008R2 locale. Ho configurato il server collegato a un database remoto.Il server collegato SQL restituisce l'errore "nessuna mappatura di accesso esiste" se si utilizza un account non amministratore

Il server collegato funziona in modo ottimale quando accedo al server locale utilizzando un account di accesso SQL con il ruolo del server sysadmin. Posso interrogare il server remoto, quindi so che l'impostazione Server collegato è corretta. Tuttavia, visualizzerei l'errore qui sotto se utilizzo un account che non ha il ruolo del server sysadmin.

Msg 7416, Level 16, State 2, Line 2 
Access to the remote server is denied because no login-mapping exists. 

per i server locali e remoti, SQL login viene utilizzato (autenticazione di Windows non è utilizzato)

Che tipo di sicurezza devo configurare per un normale account di SQL-login per usare server collegato?

+1

Se fai clic con il tasto destro del mouse. proprietà sulla definizione del server collegato e vai alla scheda Sicurezza, come viene impostata? In alternativa, script il server collegato come Crea e incolla le parti 'sp_addlinkedsrvlogin' (sanitizing password ecc.) –

+0

Cosa ha detto @ Nick.McDermaid. Se viene visualizzato Non apportare, è necessario aggiungere una mappatura all'elenco O fornire una delle 3 opzioni alternative sotto nei pulsanti di opzione. –

+0

@ Nick.McDermaid, @BradD: ho aggiunto la mappatura all'elenco. Ho provato "Non essere fatto" e "Fatti usando questo contesto di sicurezza", ed entrambe le opzioni non hanno aiutato. Tuttavia, non appena ho aggiunto il ruolo del server 'sysadmin' all'account SQL locale, ha funzionato all'istante. Perché? – Tony

risposta

7

Secondo this blog, devo specificare User ID nella stringa del provider se si utilizzano account non sysadmin. Ecco un esempio.

EXEC master.dbo.sp_addlinkedserver 
    @server = N'MyLinkServerName', 
    @provider = N'SQLNCLI', 
    @srvproduct = 'SQLNCLI', 
    @provstr = N'SERVER=MyServerName\MyInstanceName;User ID=myUser' 

Questo corrisponde esattamente a quello che ho riscontrato e risolve il mio problema.

+0

Più di un anno dopo hai risolto uno dei miei graffi alla testa! –

0

Come soluzione alternativa è possibile utilizzare il parametro @datasrc anziché @provstr. @dataSrc funziona senza impostare l'ID utente

Esempio:

EXEC master.dbo.sp_addlinkedserver @server = N'LinkServerName', @provider=N'SQLNCLI',@srvproduct = 'MS SQL Server', @datasrc=N'serverName\InstanceName' 
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname = N'LinkServerName', @locallogin = NULL , @useself = N'False', @rmtuser = N'myUser', @rmtpassword = N'*****' 

Ho aggiunto un commento here, anche, ma non è visibile (non so perché).