SQL Server - связанные серверы, запросы в одну сторону - это нормально, а в другую? - PullRequest
2 голосов
/ 09 декабря 2010

У меня есть два SQL-сервера, которые были связаны с использованием sp_addlinkedserver 'ServerB\Instance' с ServerA и sp_addlinkedserver 'ServerA\Instance' с ServerB.

Если я выполню следующий запрос с ServerA, то все в порядке:

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

Если я выполняю следующий запрос от ServerB, возникает ошибка:

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

Ошибка:

Сообщение 18456, уровень 14, состояние 1, строка 1 Ошибка входа пользователя'NT AUTHORITY \ ANONYMOUS LOGON'.

Учетные записи служб, на которых SQL Server работает на ServerA и ServerB, получили повышенные разрешения на обоих серверах в попытке решить проблему, но безуспешно.

Я провел исследование , но хочу избежать запутанного процесса, когда общение в одну сторону приемлемо.

Ответы [ 4 ]

2 голосов
/ 09 декабря 2010

Я решил эту проблему следующим образом:

  1. Удалены оба связанных сервера.
  2. Выполнен sp_addlinkedserver для ServerA из ServerA RDP (SSMS) и для ServerB из ServerB RDP (SSMS)).

Ранее я выполнял процедуру sp_addlinkedserver для обоих серверов только из одного сеанса RDP (SSMS).Выполнение с каждого сервера решило проблему.Если кто-то может добавить комментарии о том, почему это так, я буду очень признателен.

2 голосов
/ 09 декабря 2010

В SQL Management Studio просмотрите свойства для связанного сервера с сервера B на сервер A. Там есть «вкладка» безопасности, которую вы можете просмотреть оттуда.Это скажет вам контекст безопасности, который использует соединение от B до A.Ошибка, которую вы получаете, обычно возникает, когда для связанного сервера не задан действительный контекст безопасности.

Причина, по которой он может работать от A до B, а не от B до A, заключается в том, что вам нужноподключить сервер правильно на каждой стороне.Просто делать это для одного - это не работать, чтобы идти в обе стороны.

0 голосов
/ 09 декабря 2010

Чтобы обойти эту проблему, используйте один из следующих методов:

  • Сопоставьте клиентов на сервере A со стандартным входом в систему безопасности на сервере B, используя либо хранимую процедуру sp_addlinkedsrvloginили вкладка Безопасность диалогового окна Свойства связанного сервера в Enterprise Manager.

  • Если вы запускаете распределенный запрос на экземпляре SQL Server, работающем под управлением Microsoft Windows 2000 на базекомпьютер, настройте SQL Server для прослушивания клиентских запросов, используя сетевую библиотеку сервера именованных каналов, а не сетевую библиотеку сервера TCP / IP или сетевую библиотеку многопротокольного сервера.Чтобы настроить сетевые библиотеки сервера для SQL Server, используйте сетевую утилиту сервера.

Взгляните на:

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

0 голосов
/ 09 декабря 2010

Вы должны сопоставить локального пользователя с удаленным пользователем на другом сервере.Do может сделать это, вызвав sp_addremotelogin (), как описано здесь: http://msdn.microsoft.com/en-us/library/ms186338.aspx

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...