2010-12-09 2 views
1

J'ai deux serveurs SQL qui ont été liés en utilisant sp_addlinkedserver 'ServerB\Instance' de ServerA et sp_addlinkedserver 'ServerA\Instance' de ServerB.SQL Server - serveurs liés, l'interrogation d'une manière est bien mais l'autre?

Si j'exécute la requête suivante à partir du serveur, puis tout va bien:

SELECT * 
FROM [ServerB\Instance].Database.dbo.Table 

Si j'exécute la requête suivante ServerB une erreur se produit:

SELECT * 
FROM [ServerA\Instance].Database.dbo.Table 

Erreur:

Msg 18456, Level 14, State 1, Line 1 Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

Les comptes de service sous lesquels SQL Server s'exécute sous ServerA et ServerB ont reçu ermissions sur les deux serveurs dans une tentative de résoudre le problème, mais sans succès.

J'ai fait research mais je veux éviter un processus compliqué quand la communication dans un sens est correcte.

Répondre

1

J'ai résolu ce problème en suivant le processus:

  1. supprimé les deux serveurs liés.
  2. Exécuté sp_addlinkedserver pour ServerA à partir de ServerA RDP (SSMS) et pour ServerB à partir de ServerB RDP (SSMS).

Auparavant, j'avais exécuté sp_addlinkedserver pour les deux serveurs à partir de la session RDP (SSMS) d'un serveur uniquement. L'exécution de chaque serveur a résolu le problème. Si quelqu'un peut ajouter des commentaires sur les raisons de cette situation, je serai très reconnaissant.

+0

La réponse de @Charles Boyung était correcte – tomfanning

+0

Cela a résolu le problème pour moi aussi. Était en train d'essayer de relier tous mes serveurs de SSMS sur l'un d'entre eux. Je pense que la raison en est que vous invoquez un second saut quand vous le faites de cette façon. L'ajout des serveurs liés directement à partir de la console du serveur l'a corrigé pour moi. – JohnFx

2

Dans SQL Management Studio, affichez les propriétés du serveur lié du serveur B au serveur A. Il existe un onglet de sécurité que vous pouvez afficher à partir de là. Cela vous indiquera le contexte de sécurité que la connexion de B à A utilise. L'erreur que vous obtenez se produit normalement lorsque vous ne disposez pas d'un contexte de sécurité valide pour le serveur lié.

La raison pour laquelle cela peut fonctionner de A à B et non de B à A est que vous devez configurer le serveur lié correctement de chaque côté. Juste le faire pour l'un ne va pas travailler pour aller dans les deux sens.

0

Pour contourner ce problème, appliquez l'une des méthodes suivantes:

  • sur la carte les clients sur le serveur A à une connexion de sécurité standard sur le serveur B, en utilisant la procédure stockée sp_addlinkedsrvlogin ou l'onglet Sécurité de la boîte de dialogue Propriétés du serveur lié dans Enterprise Manager. Si vous exécutez la requête distribuée sur une instance de SQL Server qui s'exécute sur un ordinateur Microsoft Windows 2000, configurez SQL Server pour écouter les demandes des clients en utilisant la bibliothèque réseau Named Pipes Server, au lieu d'utiliser la bibliothèque réseau du serveur TCP/IP ou la bibliothèque réseau du serveur multiprotocole. Pour configurer les bibliothèques réseau du serveur pour SQL Server, utilisez l'utilitaire réseau du serveur.

Jetez un oeil à:

http://support.microsoft.com/kb/238477

Questions connexes