2009-05-08 4 views
9

Я пытаюсь извлечь данные с удаленного SQL Server. Я могу получить доступ к удаленному серверу с помощью проверки подлинности SQL; Мне не повезло с использованием тех же учетных данных с sp_addlinkedserver.Не удалось добавить связанный SQL-сервер

Я пытаюсь что-то вроде этого:

Exec sp_dropserver 'Remote', 'droplogins' 
go 

EXEC sp_addlinkedserver 
    @server='Remote', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='Remote', 
    @rmtuser='User', 
    @rmtpassword='Secret' 

Select Top 10 * from Remote.DatabaseName.dbo.TableName 

Вот что я получаю:

 

OLE DB provider "SQLNCLI" for linked server "Remote" returned message 
"Login timeout expired". 

OLE DB provider "SQLNCLI" for linked server "Remote" 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 53, Level 16, State 1, Line 0 
Named Pipes Provider: Could not open a connection to SQL Server [53]. 

Опять же, я могу получить доступ к серверу напрямую (в SQL Management Studio), используя эти точные учетные данные, поэтому это не проблема с моей сетью или учетными данными.

Большинство примеров, которые я видел в Интернете, похоже, связаны с учетными записями Windows, в отличие от учетных записей безопасности SQL. Не работает ли это с проверкой подлинности SQL?

ответ

6

Он действительно работает с аутентификацией sql. На самом деле это проще, поскольку вам не нужно настраивать Kerberos, если вы используете аутентификацию SQL.

одно заблуждение о ваших сообщений об ошибках, ваш адрес является IP-адрес: 123.45.678.90

Ваше сообщение об ошибке говорит о Named Pipes. Может ли это быть ключом?

Вам не нужно ссылаться на сервер в TSQL по его IP-адресу. Если вы добавите alias on the local server, указав на удаленный сервер, вы можете дать более разумное имя. Ссылка на него по IP-адресу явно неудовлетворительна.

+0

Это интересная мысль. Я получаю тот же результат, если я введу фиктивный IP-адрес или «foofoofoo» в параметр @datasrc. –

+0

Спасибо, это привело меня к правильному решению. –

+1

Ответьте мне, тогда мой хороший человек, я жажду высокий балл = D –

1

Если при указании IP-адреса в Named Pipes не отображается IP-адрес, попробуйте префикс IP-адреса с помощью «tcp:» и проверьте, не помогает ли он установить его на правильном пути.

+0

Спасибо - я пробовал это, и это не помогло. –

+1

Для тех, кто хочет подключиться по доменному имени swap @ datasrc = 'tcp: 0.0.0.0' с @ datasrc = 'mydomain.com', нет SERVER =, как и во многих других сообщениях. –

2

Фигурного это, благодаря линии инструкций мастеров графического интерфейса SMS для добавления связанных серверов: "If SQL Server is selected, then the Linked Server name is also the network name of the server."

Я думал, что имя связанного сервера просто произвольный псевдоним.

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

Exec sp_dropserver '0.0.0.0', 'droplogins' 
go 

EXEC sp_addlinkedserver 
    @server='0.0.0.0', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='0.0.0.0', 
    @rmtuser='user', 
    @rmtpassword='secret' 
go 

Select Top 10 * from [0.0.0.0].DatabaseName.dbo.TableName 
+0

Вау, это сосет. Вы уверены, что у вас нет проблемы с разрешением имен? –

+0

Не знаете, что вы имеете в виду - нет имени домена, связанного с сервером БД, всего лишь IP-адрес. –

+0

Да, у меня сейчас такая же проблема. Я попытался обойти это, указав SQLOLE (или что-то другое) в качестве поставщика и предоставив ему строку соединения, и в этом случае @server на самом деле является произвольным логическим именем ... но это не совсем соединится на производственной машине (I забыл почему). Поэтому я вернулся к этому методу и абстрагировал физическое местоположение, используя представление о представляющих интерес таблицах, которое до сих пор работало. – harpo

1

sp_configure 'Ad Hoc Distributed Queries', 1

Следующая

перенастроить с переопределения

проверили область SQL Surface configuraton -> Databaseengine -> Remoteconnections -> Loacal и remoteconnections -> shouild be Использовать как TCP/IP, так и именованные каналы, отмеченные галочкой (если не выбрать эту опцию и перезапустить)

это должно решить проблему Поставщик OLE DB «SQLNCLI» для связанного сервера «Удаленное» сообщение «Произошла ошибка при установлении соединения с сервером. При подключении к SQL Server 2005 этот отказ может быть вызван фактом, что при настройках по умолчанию SQL Server не разрешает удаленные подключения . ".

9

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

EXEC sp_addlinkedserver 
    @server='TEST_LINK', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0' 

EXEC sp_addlinkedsrvlogin 
    @useself='FALSE', 
    @rmtsrvname='TEST_LINK', 
    @rmtuser='user', 
    @rmtpassword='secret' 

Это работает для меня. Этот метод также позволил мне указать нестандартный порт для удаленного сервера:

EXEC sp_addlinkedserver 
    @server='TEST_LINK', 
    @srvproduct='', 
    @provider='SQLNCLI', 
    @datasrc='tcp:0.0.0.0,1111' 

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

0

Иногда протоколы были включены и конфигурация площади поверхности позволяет удаленные соединения, но SQL Служба Server Browser не была перезапущена с момента установки конфигурации. Это означает, что конфигурация не активна.

Попробуйте перезапустить SQL Server Browser в качестве шага устранения неполадок, если все параметры конфигурации выглядят правильно.

Mike

Смежные вопросы