Из моего понимания этого вопроса это проблема "HOP".
то есть вы пытаетесь использовать сервер A для передачи ваших регистрационных данных (с помощью SSPI) на сервер B.
В SQL Server 2005 они добавили множество проблем безопасности, которые усложняют ситуацию. Слова «Аутентификация Kerberos» станут преимуществом жизни большинства системных администраторов / администраторов баз данных. Он эффективно используется для сквозной аутентификации.
Вот основы того, что вам нужно. 1) Серверы (A и B) необходимо настроить в Active Directory (AD) с включенным делегированием для Kerberos. (это устанавливается через панель администратора вашего активного каталога)
2) Учетная запись службы, под которой работают ваши SQL-серверы, должна также включать делегирование (это также устанавливается через панель администратора вашего активного каталога). - если они не работают под учетной записью службы, вам необходимо создать ее.
3) Серверы должны иметь имена участников-служб для экземпляра, хост и имя компьютера. (Использование инструмента SetSPN в инструментах поддержки Windows)
Инструменты поддержки (SetSPN входит в этот набор)
http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en
(Обзор того, как добавить имя участника-службы)
http://technet.microsoft.com/en-us/library/bb735885.aspx
4) Вам может потребоваться установить вашу базу данных как «заслуживающую доверия»
ALTER DATABASE SET заслуживает доверия на
5) После того, как вы все это сделали, перезапустите ваши экземпляры.
6) Затем попробуйте снова создать свой связанный сервер.
Наконец, вы можете проверить ваше соединение с SQL Server. Это должно работать нормально, если все настроено правильно.
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=ServerB;Integrated Security=SSPI;'
).MASTER.dbo.syscolumns
Это скажет вам ваш тип аутентификации соединения.
select auth_scheme from sys.dm_exec_connections where session_id=@@SPID
Вы хотите получить «KERBEROS» здесь, а не «NTLM».
Это скользкий уклон, KERBEROS и Pass-through Delegation, придерживайтесь его, и вы в конце концов поймете это.
Ссылки
Kerberos
http://blogs.msdn.com/sql_protocols/archive/2005/10/12/479871.aspx
http://blogs.msdn.com/sql_protocols/archive/2006/12/02/understanding-kerberos-and-ntlm-authentication-in-sql-server-connections.aspx
http://blogs.iis.net/brian-murphy-booth/archive/2007/03/09/the-biggest-mistake-serviceprincipalname-s.aspx
Другие проявления проблемы
http://www.sqlservercentral.com/Forums/Topic460425-359-1.aspx
http://msdn2.microsoft.com/en-us/library/aa905162(sql.80).aspx
http://msdn2.microsoft.com/en-us/library/ms189580.aspx
Я надеюсь, что это все помогает.
Вы также можете использовать SQL Server Management Studio (SSMS) для управления \ создания связанных серверов, а также, если вам удобнее использовать графический интерфейс. Для этого:
Обратите внимание, что это предполагает, что пользователи, имеющие логины на сервере A, также имеют логины на сервере B.
источник
Я схожу с ума с той же проблемой! Я помню, что делать это с 2000 года всегда было легко. Я был на всем протяжении Google, и я не могу заставить это работать. Точная настройка, оба сервера работают под учетной записью домена, аутентификация Windows.
Я пытаюсь использовать именованные каналы вместо TCP, и по крайней мере я получаю другую ошибку:
Это может быть связано с включением каналов имен, но я могу подключиться через sqlcmd с сервера A к серверу B следующим образом:
Если я не использовал именованные каналы, а просто делаю:
Я получаю это:
[Править] Я начал обсуждение на Sql Server Central по этому поводу. По сути, вам нужно сделать несколько сложных настроек, связанных с делегированием Kerberos, чтобы заставить это работать.
http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx
Я решил создать единую ограниченную учетную запись Sql Login для обработки связанных запросов. Я ненавижу прибегать к этому, но это кажется более безопасным, чем изменения, которые вы должны сделать, чтобы заставить его работать с аутентификацией Windows.
источник
Если вы выполните поиск по sp_addlinkedserver и sp_linkedservers, вы получите несколько примеров. Это довольно просто настроить.
источник
Также, если у вас есть SQL Manager, вы можете добавить его с графическим интерфейсом.
По сути, вам нужно связать два сервера либо с помощью SP, упомянутых Тимом, либо через графический интерфейс пользователя, а затем установить правила доступа (что даже не требуется, если вы используете проверку подлинности Windows на обоих серверах).
источник
Я знаю, что это должно быть легко, но у меня это совсем не работает - у меня здесь проблемы с безопасностью. Поэтому я хотел бы, чтобы кто-то разъяснил мне шаги.
Я делал это в прошлом на SQL 2000 без проблем.
источник
Таким образом, вы можете связать их, но не можете выполнить запрос из-за неправильных учетных записей?
Имеет ли пользователь Windows, который вы пытаетесь использовать, права на чтение данных на обоих серверах?
Однажды у меня тоже была проблема, потому что свойство доступа к данным было установлено в false по неизвестной причине.
Также попробуйте, что произойдет, если вы явно установите одного пользователя для другого пользователя для ссылки.
(Все это можно сделать в SQL Manager.)
источник
Тим опубликовал точные шаги, которые я предположил, были правильными. Шаг 5 - страница безопасности. Я выбираю «Сделать, используя текущий контекст безопасности входа в систему».
Когда я нажимаю ОК, я получаю следующую ошибку. Я не знаю, почему он пытается использовать NT Authority \ Anonymous login. Я вошел в свою рабочую станцию с моей учетной записью домена, которая имеет все права на обоих серверах.
источник
Попробуйте сделать это, когда вы локально вошли на сервер, если вы делаете это с удаленной машины, возможно, вы не отправляете правильные учетные данные.
источник