Настройка сервера SQL Server к серверу sql

25

Пожалуйста, объясните, что требуется для настройки связанного сервера SQL Server.

Сервер A - только вход в систему Windows 2005 SQL Server - то же самое (только вход в систему Windows 2005)

Сервер A работает под управлением Windows XP Сервер B работает под управлением Windows Server 2003

Обе службы SQL Server работают под одной учетной записью домена. Я вошел на мою рабочую станцию ​​с учетной записью домена, которая имеет права администратора на обоих серверах SQL.

Обратите внимание, что оба они являются SQL Server 2005 с пакетом обновления 2 (SP2) - мне уже указывали старые исправления, но они уже применяются.

Проблема, с которой я столкнулся, заключается в следующей ошибке: «Ошибка входа пользователя« NT AUTHORITY \ ANONYMOUS LOGON »(Microsoft SQL Server, ошибка: 18456)»

ScottStonehouse
источник

Ответы:

18

Из моего понимания этого вопроса это проблема "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

Я надеюсь, что это все помогает.

evilhomer
источник
Отличный ответ! Это определенно суммирует массу информации, которая бесполезно организована в других местах.
КонстантинK
3

Вы также можете использовать SQL Server Management Studio (SSMS) для управления \ создания связанных серверов, а также, если вам удобнее использовать графический интерфейс. Для этого:

  1. Запустите SSMS и подключитесь к одному из экземпляров SQL Server, который вы хотите связать
  2. Разверните «Объекты сервера» в Обозревателе объектов.
  3. Щелкните правой кнопкой мыши «Связанные серверы» и выберите «Новый связанный сервер».
  4. В диалоговом окне «Новый связанный сервер» выберите «SQL Server» в качестве типа сервера и введите экземпляр SQL Server, на который вы хотите сослаться.
  5. На странице «Безопасность» выберите способ аутентификации пользователей с текущего сервера на связанный сервер. Вы упомянули, что оба сервера настроены на использование логинов Windows. Если это так, то в разделе «Для имени входа, не определенного в приведенном выше списке, соединения будут:» Я бы, вероятно, выбрал параметр «Сделать с использованием текущего контекста безопасности входа» .

Обратите внимание, что это предполагает, что пользователи, имеющие логины на сервере A, также имеют логины на сервере B.

Тим Лентин
источник
1

Я схожу с ума с той же проблемой! Я помню, что делать это с 2000 года всегда было легко. Я был на всем протяжении Google, и я не могу заставить это работать. Точная настройка, оба сервера работают под учетной записью домена, аутентификация Windows.

Я пытаюсь использовать именованные каналы вместо TCP, и по крайней мере я получаю другую ошибку:

EXEC sp_addlinkedserver 
    @server='statler', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='np:statler', 
    @provstr='Integrated Security=SSPI'

-- Then I try this:
select net_transport, auth_scheme 
from statler.master.sys.dm_exec_connections 
where session_id=@@spid

/*

Getting closer, but still fails:

OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Login timeout expired".
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "An error has occurred while establishing a connection to the server. 
    When connecting to SQL Server 2005, this failure may be caused by the 
    fact that under the default settings SQL Server does not allow 
    remote connections.".
Msg 5, Level 16, State 1, Line 0
Named Pipes Provider: Could not open a connection to SQL Server [5]. 
OLE DB provider "SQLNCLI" for linked server "statler" returned message 
    "Invalid connection string attribute".

*/

Это может быть связано с включением каналов имен, но я могу подключиться через sqlcmd с сервера A к серверу B следующим образом:

WALDORF:>  Sqlcmd.exe /E /Snp:statler

Если я не использовал именованные каналы, а просто делаю:

New Linked Server
Server Type: SqlServer
Security: be made using the current login's security context

Я получаю это:

Login failed for user NT AUTHORITY\ANONYMOUS LOGIN

[Править] Я начал обсуждение на Sql Server Central по этому поводу. По сути, вам нужно сделать несколько сложных настроек, связанных с делегированием Kerberos, чтобы заставить это работать.

http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx

Я решил создать единую ограниченную учетную запись Sql Login для обработки связанных запросов. Я ненавижу прибегать к этому, но это кажется более безопасным, чем изменения, которые вы должны сделать, чтобы заставить его работать с аутентификацией Windows.

Эрик З Борода
источник
Смотрите ниже для сложной настройки Kerberos. Этот материал убил меня на долгое время!
evilhomer
0

Если вы выполните поиск по sp_addlinkedserver и sp_linkedservers, вы получите несколько примеров. Это довольно просто настроить.

Тим Кокран
источник
0

Также, если у вас есть SQL Manager, вы можете добавить его с графическим интерфейсом.

По сути, вам нужно связать два сервера либо с помощью SP, упомянутых Тимом, либо через графический интерфейс пользователя, а затем установить правила доступа (что даже не требуется, если вы используете проверку подлинности Windows на обоих серверах).


источник
0

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

Я делал это в прошлом на SQL 2000 без проблем.

ScottStonehouse
источник
0

Таким образом, вы можете связать их, но не можете выполнить запрос из-за неправильных учетных записей?

Имеет ли пользователь Windows, который вы пытаетесь использовать, права на чтение данных на обоих серверах?

Однажды у меня тоже была проблема, потому что свойство доступа к данным было установлено в false по неизвестной причине.

Также попробуйте, что произойдет, если вы явно установите одного пользователя для другого пользователя для ссылки.

(Все это можно сделать в SQL Manager.)


источник
0

Тим опубликовал точные шаги, которые я предположил, были правильными. Шаг 5 - страница безопасности. Я выбираю «Сделать, используя текущий контекст безопасности входа в систему».

Когда я нажимаю ОК, я получаю следующую ошибку. Я не знаю, почему он пытается использовать NT Authority \ Anonymous login. Я вошел в свою рабочую станцию ​​с моей учетной записью домена, которая имеет все права на обоих серверах.

НАЗВАНИЕ: Microsoft SQL Server Management Studio

«Связанный сервер был создан, но не прошел проверку соединения. Хотите сохранить связанный сервер?»

------------------------------ ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ:

Возникла исключительная ситуация при выполнении оператора или пакета Transact-SQL. (Microsoft.SqlServer.ConnectionInfo)


Не удалось войти в систему для пользователя 'NT AUTHORITY \ ANONYMOUS LOGON'. (Microsoft SQL Server, ошибка: 18456)

Для получения справки нажмите: http://go.microsoft.com/fwlink?ProdName=Microsoft+SQL+Server&ProdVer=09.00.3068&EvtSrc=MSSQLServer&EvtID=18456&LinkId=20476

ScottStonehouse
источник
0

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


источник