Zadanie programu SQL Agent, które wykonuje rozproszone zapytanie, może się nie udać z komunikatami o błędach 65535, 782 lub 7437

Symptomy

Zadanie agenta SQL, które wykonuje zapytanie rozproszone (połączonego serwera) może nie działać z jednym z komunikatów o błędach podobnych do poniższych, gdy właściciel zadania nie jest członkiem roli serwera sysadmin :

Dostawca OLE DB "<nazwę dostawcy>" dla połączonego serwera "<nazwa LinkedServer>" zwrócony komunikat "Upłynął limit czasu logowania". Dostawca OLE DB "<> nazwa dostawcy" dla połączonego serwera "" <nazwa LinkedServer> "zwrócony komunikat" Wystąpił błąd podczas nawiązywania połączenia z serwerem. Podczas łączenia się z programem SQL Server 2005 ten błąd może być spowodowany tym, że w ustawieniach domyślnych program SQL Server nie zezwala na połączenia zdalne. Msg 65535, poziom 16, stan 1, linia 0SQL network interfaces: błąd lokalizowania określonego serwera/wystąpienia [xFFFFFFFF].

Lub

Msg 782, poziom 16, stan 1, dostawca 0SSL dla linii: żadne poświadczenia nie są dostępne wdostawcy OLE DB pakietu zabezpieczeń "<>nazw dostawców" dla połączonego serwera "<nazwa LinkedServer>" zwrócony komunikat "klient nie może nawiązać połączenia".

Na przykład w środowisku SQL Server 2008 komunikaty o błędach mogą być podobne do następujących:

Dostawca OLE DB "SQLNCLI" dla połączonego serwera "<LinkedServer Name>" zwrócony komunikat "Upłynął limit czasu logowania". Dostawca OLE DB "SQLNCLI" dla połączonego serwera "" <LinkedServer Name> "zwrócony komunikat" Wystąpił błąd podczas nawiązywania połączenia z serwerem. Podczas łączenia się z programem SQL Server 2005 ten błąd może być spowodowany tym, że w ustawieniach domyślnych program SQL Server nie zezwala na połączenia zdalne. Msg 65535, poziom 16, stan 1, linia 0SQL network interfaces: błąd lokalizowania określonego serwera/wystąpienia [xFFFFFFFF].

Lub

Msg 782, poziom 16, stan 1, dostawca 0SSL dla linii: żadne poświadczenia nie są dostępne w pakiecie zabezpieczeńOLE DB Provider "sqlncli10" dla połączonego serwera "<LinkedServer Name>" zwrócony komunikat "klient nie może nawiązać połączenia".

Lub

Msg 7437, poziom 16, stan 1, 3Linked Server nie można użyć w obszarze personifikacja bez mapowania dla personifikowanego logowania.

W przypadku korzystania z funkcji OPENQUERY lub wykonywania zapytania rozproszonego za pomocą personifikacji w instrukcji "Uruchom jako login" T-SQL może być również wyświetlane takie samo zachowanie.

Przyczyna

Krok zadania w języku Transact-SQL jest uruchamiany jako właściciel kroku zadania, jeśli właściciel kroku zadania nie jest członkiem stałej roli serwera sysadmin . Program SQL agent używa polecenia "Uruchom jako login", aby uruchomić krok zadania w kontekście właściciela kroku zadania. Instrukcji EXECUTE AS nie można używać na różnych granicach serwera. Takie działanie jest celowe. Aby uzyskać dodatkowe informacje, zobacz następujące tematy w dokumentacji książki online programu SQL Server:

Uwaga: ta sama przyczyna dotyczy scenariusza, w którym można ręcznie spróbować zmienić kontekst wykonywania zapytania rozproszonego w programie Management Studio przy użyciu instrukcji EXECUTE AS .

Obejście

Ważne: poniższe obejście wymaga zdefiniowania jawnego logowania lokalnego serwera do mapowań logowania serwera zdalnego przy użyciu strony zabezpieczeń w obszarze właściwości obiektu serwera połączonego. Ponieważ kolumna użytkownika zdalnego musi być loginem uwierzytelniania programu SQL Server na serwerze zdalnym, w trybie uwierzytelniania serwera zdalnego należy ustawić tryb mieszany lub zmienić go na tryb mieszany przed użyciem obejścia opisanego poniżej. Jeśli krok zadania programu T-SQL jest własnością użytkownika, który nie jest częścią roli serwera sysadmin i jeśli ten krok zawiera zapytanie rozproszone, wykonaj następujące czynności, aby upewnić się, że zadania lub zapytania nie powiodą się:

  1. Utwórz mapowanie każdego właściciela etapu zadania na serwerze lokalnym na istniejący lub nowy login na serwerze zdalnym.

  2. Upewnij się, że logowanie ma wystarczające uprawnienia do wykonywania różnych modułów na serwerze zdalnym, do którego można uzyskać dostęp w ramach zapytania rozproszonego.

Aby uzyskać dodatkowe informacje, zobacz następujący temat w dokumentacji książki online programu SQL Server:

Więcej informacji

Czasami może się okazać, że zapytania omówione w jednej z sekcji Symptomy mogą zostać pomyślnie uruchomione. Dzieje się tak zwykle wtedy, gdy personifikowany użytkownik uprzednio zalogował się do systemu zdalnego, a system nadal otworzył połączenie ustanowione przez zdalne użytkowanie. Nie należy oczekiwać, że kwerenda będzie działać przez cały czas.Procedura odtwarzania zachowania

  1. W wystąpieniu SQL Utwórz serwer połączony z innym wystąpieniem programu SQL, używając programu SQL Server Management Studio (SSMS) lub poniższego skryptu.

    EXEC master.dbo.sp_addlinkedserver @server = <server name>, @srvproduct=N'SQL Server'/* For security reasons the linked server remote logins password is changed with ######## */EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=<servername> ,@useself=N'True',@locallogin=NULL,@rmtuser=NULL,@rmtpassword=NULL
  2. Wykonaj następujące zapytanie w programie SSMS, używając logowania, które jest członkiem roli serwera sysadmin i upewnij się, że działa prawidłowo.

    select * from <servername>.master.sys.sysobjects
  3. Teraz zmień kontekst kwerendy na konto bez sysadmin i wykonaj tę samą kwerendę.

    execute as login=’Domain\Login1’goselect suser_sname()goselect * from <servername>.master.sys.sysobjectsgo

    Ten krok kończy się niepowodzeniem z błędem opisanym w sekcji Symptomy artykułu.

Potrzebna dalsza pomoc?

Rozwijaj swoje umiejętności
Poznaj szkolenia
Uzyskuj nowe funkcje w pierwszej kolejności
Dołącz do niejawnych testerów firmy Microsoft

Czy te informacje były pomocne?

Dziękujemy za opinię!

Dziękujemy za opinię! Wygląda na to, że połączenie Cię z jednym z naszych agentów pomocy technicznej pakietu Office może być pomocne.

×