Z mojego zrozumienia tego problemu jest to problem „HOP”.
tzn. próbujesz użyć serwera A do przekazania danych logowania (za pomocą SSPI) do serwera B.
W SQL Server 2005 dodali całą masę problemów bezpieczeństwa, które sprawiają, że jest to trudniejsze niż powinno być. Słowa „Uwierzytelnianie Kerberos” staną się barem życia większości sys-admins / DBA. Jest skutecznie wykorzystywany do uwierzytelniania przekazywanego.
Oto podstawy tego, czego potrzebujesz. 1) Serwery (A i B) należy skonfigurować w usłudze Active Directory (AD) z włączonym delegowaniem dla protokołu Kerberos. (ustawia się to w panelu administracyjnym Active Directory)
2) Konto usługi, na którym działają Twoje serwery SQL, musi również mieć włączoną delegację (jest to również ustawiane w panelu administracyjnym Active Directory). - jeśli nie działają na koncie usługowym, musisz je utworzyć.
3) Serwery muszą mieć zdefiniowane nazwy SPN dla instancji, hosta i nazwy komputera. (Korzystanie z narzędzia o nazwie SetSPN w narzędziach obsługi systemu Windows)
Narzędzia wsparcia (SetSPN jest w tym zestawie)
http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en
(Omówienie sposobu dodawania nazwy SPN)
http://technet.microsoft.com/en-us/library/bb735885.aspx
4) Może być konieczne ustawienie DB na „godny zaufania”
ZMIEŃ ZESTAW BAZY DANYCH godne zaufania na
5) Po tym wszystkim zrestartuj instancje.
6) Następnie spróbuj ponownie utworzyć połączony serwer.
Wreszcie możesz przetestować połączenie z SQL Server. Powinno to działać poprawnie, jeśli masz wszystko poprawnie skonfigurowane.
SELECT *
FROM OPENDATASOURCE('SQLNCLI',
'Data Source=ServerB;Integrated Security=SSPI;'
).MASTER.dbo.syscolumns
Dzięki temu dowiesz się, jaki jest typ uwierzytelnienia połączenia.
select auth_scheme from sys.dm_exec_connections where session_id=@@SPID
Chcesz dostać tutaj „KERBEROS”, a nie „NTLM”.
To śliskie zbocze, KERBEROS i delegacja tranzytowa, trzymaj się go, a w końcu to rozwiążesz.
Odnośniki
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
Inne przejawy problemu
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
Mam nadzieję, że to wszystko pomoże.
Możesz także użyć programu SQL Server Management Studio (SSMS) do zarządzania \ tworzeniem połączonych serwerów, jeśli masz większą wygodę korzystania z GUI. Aby to zrobić:
Należy pamiętać, że zakłada to, że użytkownicy, którzy logują się na serwerze A, również logują się na serwerze B.
źródło
Mam bzika na punkcie tego samego problemu! Pamiętam, że zrobienie tego z 2000 było zawsze łatwe. Byłem w wyszukiwarce Google i nie mogę tego uruchomić. Dokładnie taka sama konfiguracja, oba serwery działają na koncie domeny, uwierzytelnianie systemu Windows.
Próbuję użyć nazwanych potoków zamiast TCP i przynajmniej dostaję inny błąd:
Może to mieć coś wspólnego z włączaniem potoków nazw, ale mogę połączyć się za pomocą narzędzia sqlcmd z serwera A do serwera B w następujący sposób:
Jeśli nie użyłem nazwanych potoków i po prostu:
Rozumiem:
[Edytuj] Rozpocząłem dyskusję na ten temat na Sql Server Central. Zasadniczo musisz wykonać skomplikowaną konfigurację związaną z delegowaniem Kerberos, aby to zadziałało.
http://www.sqlservercentral.com/Forums/Topic574262-146-1.aspx
Postanowiłem utworzyć tylko jedno, ograniczone konto Sql Login do obsługi połączonych zapytań. Nienawidzę uciekać się do tego, ale wydaje się to bezpieczniejsze niż zmiany, które musisz wprowadzić, aby działało z systemem Windows Auth.
źródło
Jeśli wykonasz wyszukiwanie na sp_addlinkedserver i sp_linkedservers, otrzymasz kilka przykładów. Konfiguracja jest bardzo prosta.
źródło
Również jeśli masz SQL Managera, możesz dodać go za pomocą GUI.
Zasadniczo musisz połączyć dwa serwery albo SP wymienionymi przez Tima, albo GUI, a następnie ustawić reguły dostępu (co nie jest nawet potrzebne, jeśli używasz uwierzytelniania Windows na obu serwerach).
źródło
Wiem, że to powinno być łatwe, ale w ogóle nie działa dla mnie - mam tutaj problemy z bezpieczeństwem. Chciałbym więc, żeby ktoś przeliterował mi kroki.
Robiłem to w przeszłości na SQL 2000 bez żadnych problemów.
źródło
Więc możesz je połączyć, ale nie możesz wykonać zapytania z powodu niewłaściwych kont?
Czy użytkownik systemu Windows, którego próbujesz użyć, ma prawa do odczytu danych na obu serwerach?
Kiedyś miałem również problem, ponieważ właściwość „dostęp do danych” została ustawiona na false z nieznanego powodu.
Wypróbuj również, co się stanie, jeśli jednoznacznie ustawisz jednego użytkownika na innego użytkownika dla łącza.
(Wszystko to można zrobić w SQL Managerze).
źródło
Tim opublikował dokładne kroki, które według mnie były prawidłowe. Krok 5 to strona bezpieczeństwa. Wybieram „Wykonaj przy użyciu bieżącego kontekstu bezpieczeństwa logowania”.
Po kliknięciu OK pojawia się następujący błąd. Nie wiem, dlaczego próbuje użyć „NT Authority \ Anonimowego logowania”. Jestem zalogowany na mojej stacji roboczej za pomocą konta domeny, które ma wszystkie prawa na obu serwerach.
źródło
Spróbuj to zrobić, gdy jesteś zalogowany lokalnie na serwerze, jeśli robisz to ze zdalnego komputera, możesz nie wysyłać odpowiednich poświadczeń.
źródło