Udostępnij za pomocą


Tworzenie połączonych serwerów (aparat bazy danych programu SQL Server)

Dotyczy:SQL ServerAzure SQL Managed Instance

W tym artykule pokazano, jak utworzyć połączony serwer i uzyskać dostęp do danych z innego programu SQL Server, wystąpienia zarządzanego usługi Azure SQL lub innego źródła danych przy użyciu programu SQL Server Management Studio (SSMS) lub języka Transact-SQL. Serwery połączone umożliwiają aparatowi bazy danych programu SQL Server i usłudze Azure SQL Managed Instance odczytywanie danych ze zdalnych źródeł danych i wykonywanie poleceń względem zdalnych serwerów baz danych (na przykład źródeł danych OLE DB) poza wystąpieniem programu SQL Server.

Kontekst

Serwery połączone są zwykle skonfigurowane tak, aby umożliwić aparatowi bazy danych wykonywanie instrukcji Transact-SQL, która zawiera tabele w innym wystąpieniu programu SQL Server lub innym produkcie bazy danych, takim jak Oracle. Wiele typów źródeł danych można skonfigurować jako serwery połączone, w tym dostawców baz danych innych firm i usługi Azure Cosmos DB.

Po utworzeniu serwera połączonego zapytania rozproszone mogą być uruchamiane na tym serwerze, a zapytania mogą łączyć tabele z więcej niż jednego źródła danych. Jeśli połączony serwer jest zdefiniowany jako wystąpienie programu SQL Server lub usługi Azure SQL Managed Instance, można wykonać zdalne procedury składowane.

Możliwości i wymagane argumenty połączonego serwera mogą się znacznie różnić. Przykłady w tym artykule zawierają typowy przykład, ale nie opisano wszystkich opcji. Aby uzyskać więcej informacji, zobacz sp_addlinkedserver.

Uprawnienia

W przypadku korzystania z instrukcji Transact-SQL wymagane jest ALTER ANY LINKED SERVER uprawnienie na serwerze lub członkostwo w stałej roli serwera setupadmin. Korzystanie z programu Management Studio wymaga CONTROL SERVER uprawnień lub członkostwa w stałej roli serwera sysadmin.

Tworzenie połączonego serwera za pomocą programu SSMS

Utwórz serwer połączony z programem SSMS przy użyciu następującej procedury:

Otwieranie okna dialogowego Nowy połączony serwer

W programie SQL Server Management Studio (SSMS):

  1. Otwórz Eksploratora obiektów.
  2. Rozwiń węzeł Obiekty serwera.
  3. Kliknij prawym przyciskiem myszy pozycję Połączone serwery.
  4. Wybierz pozycję Nowy połączony serwer.

Edytowanie strony Ogólne dla właściwości serwera połączonego

  1. Na stronie Ogólne w polu Serwer połączony wpisz nazwę wystąpienia programu SQL Server , z którym łączysz się.

    Uwaga / Notatka

    Jeśli wystąpienie programu SQL Server jest wystąpieniem domyślnym, wprowadź nazwę komputera, który hostuje wystąpienie programu SQL Server. Jeśli program SQL Server jest nazwanym wystąpieniem, wprowadź nazwę komputera i nazwę wystąpienia, na przykład Accounting\SQLExpress.

  2. W razie potrzeby określ typ serwera i powiązane informacje:

    • SQL Server

      Zidentyfikuj połączony serwer jako wystąpienie programu Microsoft SQL Server lub wystąpienie zarządzane usługi Azure SQL. Jeśli używasz tej metody definiowania serwera połączonego, nazwa określona na serwerze połączonym musi być nazwą sieciową serwera. Ponadto wszystkie tabele pobrane z serwera pochodzą z domyślnej bazy danych zdefiniowanej na potrzeby logowania na serwerze połączonym.

    • Inne źródło danych

      Określ typ serwera OLE DB inny niż SQL Server. Wybierz tę opcję, aby aktywować opcje.

    • Dostawca

      Wybierz źródło danych OLE DB z pola listy. Dostawca OLE DB jest zarejestrowany przy użyciu danego identyfikatora PROGID w rejestrze.

    • Nazwa produktu

      Wpisz nazwę produktu źródła danych OLE DB, aby dodać je jako serwer połączony.

    • Źródło danych

      Wpisz nazwę źródła danych interpretowaną przez dostawcę OLE DB. Jeśli nawiązujesz połączenie z wystąpieniem programu SQL Server, podaj nazwę wystąpienia.

    • Ciąg dostawcy

      Wpisz unikatowy identyfikator programowy (PROGID) dostawcy OLE DB, który odpowiada źródle danych. Aby zapoznać się z przykładami prawidłowych ciągów dostawcy, zobacz sp_addlinkedserver.

    • Lokalizacja

      Wpisz lokalizację bazy danych interpretowaną przez dostawcę OLE DB.

    • Katalog

      Wpisz nazwę wykazu, który ma być używany podczas nawiązywania połączenia z dostawcą OLE DB.

Edytowanie strony Zabezpieczenia dla właściwości serwera połączonego

Na stronie Zabezpieczenia określ kontekst zabezpieczeń, który jest używany, gdy oryginalne wystąpienie łączy się z serwerem połączonym. Istnieją dwie strategie, które można skonfigurować w tym miejscu, które mogą być używane samodzielnie lub połączone. Pierwszym z nich jest mapowanie nazw logowania z serwera lokalnego na serwer zdalny, a drugi to sposób, w jaki połączony serwer powinien traktować nazwy logowania, które nie są mapowane.

Dodawanie mapowań logowania

Opcjonalnie możesz określić sposób uwierzytelniania określonych logowań serwera lokalnego przy użyciu serwera połączonego.

W obszarze Logowanie serwera lokalnego do mapowań logowania serwera zdalnego powtórz następujący proces dla każdego logowania, który chcesz mapować:

  1. Wybierz Dodaj.

  2. Określ nazwę logowania lokalnego.

    Określ identyfikator logowania lokalnego, który może łączyć się z serwerem połączonym. Logowanie lokalne może być logowaniem przy użyciu uwierzytelniania programu SQL Server lub logowania uwierzytelniania systemu Windows. Korzystanie z grupy systemu Windows lub użytkownika zawartej bazy danych nie jest obsługiwane. Użyj tej listy, aby ograniczyć połączenie z określonymi identyfikatorami logowania lub zezwolić niektórym identyfikatorom logowania na nawiązywanie połączenia jako innego identyfikatora logowania.

    Uwaga / Notatka

    Typowe problemy z serwerami połączonymi przy użyciu uwierzytelniania systemu Windows do zdalnego wystąpienia programu SQL Server wynikają z problemów z nazwami główną usługi (SPN). Aby uzyskać więcej informacji, zobacz Obsługa głównej nazwy usługi (SPN) w połączeniach klientów. Microsoft Kerberos Configuration Manager for SQL Server to narzędzie diagnostyczne ułatwiające rozwiązywanie problemów z łącznością protokołu Kerberos z programem SQL Server. Aby uzyskać więcej informacji, zobacz Microsoft Kerberos Configuration Manager for SQL Server.

  3. Wybierz pozycję Personifikuj (opcjonalnie).

    Przekaż nazwę użytkownika i hasło z lokalnego logowania do serwera połączonego. W przypadku uwierzytelniania programu SQL Server na serwerze zdalnym musi istnieć nazwa logowania o dokładnie takiej samej nazwie i haśle. W przypadku logowań systemu Windows identyfikator logowania musi być prawidłowym identyfikatorem logowania na serwerze połączonym.

    Aby móc używać personifikacji, konfiguracja musi spełniać wymagania dotyczące delegowania.

  4. Określ użytkownika zdalnego , jeśli nie używasz personifikacji.

    Użyj użytkownika zdalnego, aby zamapować użytkownika zdefiniowanego w polu Logowanie lokalne. Użytkownik zdalny musi być identyfikatorem logowania uwierzytelniania programu SQL Server na serwerze zdalnym.

  5. Określ hasło zdalne , jeśli nie używasz personifikacji.

    Określ hasło użytkownika zdalnego.

  6. Wybierz pozycję Usuń , aby usunąć istniejące dane logowania lokalnego, jeśli jest to konieczne.

Określ domyślny kontekst zabezpieczeń dla identyfikatorów logowania, których nie ma na liście mapowań

W środowisku domeny, w którym użytkownicy nawiązują połączenie przy użyciu identyfikatorów logowania do domeny, wybranie pozycji Być wykonane przy użyciu bieżącego kontekstu zabezpieczeń logowania jest często najlepszym wyborem. Gdy użytkownicy łączą się z oryginalnym programem SQL Server przy użyciu logowania programu SQL Server , najlepszym wyborem jest często wybranie opcji Przy użyciu tego kontekstu zabezpieczeń, a następnie podanie niezbędnych poświadczeń do uwierzytelnienia na serwerze połączonym.

Wybierz jedną z następujących opcji:

  • Nie można wykonać

    Połączenie nie zostanie nawiązane dla identyfikatorów logowania, które nie zostanie zdefiniowane na liście.

  • Nie należy używać kontekstu zabezpieczeń

    Połączenie nawiązywane jest bez używania kontekstu zabezpieczeń dla loginów, które nie zostały zdefiniowane na liście.

  • Należy wykonać przy użyciu bieżącego kontekstu zabezpieczeń logowania

    Połączenie jest nawiązywane przy użyciu bieżącego kontekstu zabezpieczeń dla danych logowania, które nie są zdefiniowane na liście. W przypadku połączenia z serwerem lokalnym przy użyciu uwierzytelniania systemu Windows poświadczenia systemu Windows są używane do nawiązywania połączenia z serwerem zdalnym. Jeśli nawiązujesz połączenie z serwerem lokalnym używając uwierzytelniania SQL Server, Twoja nazwa logowania i hasło są używane do połączenia z serwerem zdalnym. W takim przypadku na serwerze zdalnym musi istnieć nazwa logowania o dokładnie takiej samej nazwie i haśle.

  • Należy używać tego kontekstu zabezpieczeń

    Połączenie jest nawiązywane przy użyciu nazwy logowania i hasła określonych w polach Logowanie zdalne i Hasło dla logowań nie zdefiniowanych na liście. Zdalne logowanie musi być identyfikatorem logowania uwierzytelniania programu SQL Server na serwerze zdalnym.

Ostrzeżenie

Jeśli połączony serwer jest skonfigurowany z opcją Być wykonane przy użyciu tego kontekstu zabezpieczeń, każdy użytkownik w wystąpieniu może uzyskać dostęp do zdalnego serwera połączonego przy użyciu tego kontekstu. Może to mieć niezamierzony potencjał nadużyć lub złośliwego dostępu wewnętrznego. Uwierzytelnione zdalne logowanie SQL podane na połączonym serwerze powinno mieć minimalne niezbędne uprawnienia na serwerze zdalnym, aby zapewnić zasadę najniższych uprawnień i zmniejszyć obszar ataków.

Edytowanie strony Opcje serwera we właściwościach serwera połączonego (opcjonalnie)

Aby wyświetlić lub określić opcje serwera, wybierz stronę Opcje serwera . Możesz edytować dowolną z następujących opcji:

  • Sortowanie zgodne

    Wpływa na wykonywanie zapytań rozproszonych na serwerach połączonych. Jeśli ta opcja ma wartość true, program SQL Server zakłada, że wszystkie znaki na serwerze połączonym są zgodne z serwerem lokalnym, w odniesieniu do zestawu znaków i sekwencji sortowania (lub kolejności sortowania). Dzięki temu program SQL Server może wysyłać porównania w kolumnach znaków do dostawcy. Jeśli ta opcja nie jest ustawiona, program SQL Server zawsze ocenia porównania w kolumnach znaków lokalnie.

    Tę opcję należy ustawić tylko wtedy, gdy jest pewne, że źródło danych odpowiadające serwerowi połączonemu ma ten sam zestaw znaków i kolejność sortowania co serwer lokalny.

  • Dostęp do danych

    Włącza i wyłącza połączony serwer na potrzeby dostępu do zapytań rozproszonych.

  • RPC

    Włącza zdalne wywołania procedur (RPC) z określonego serwera.

  • Wyjście RPC

    Włącza RPC do określonego serwera.

  • Korzystanie z sortowania zdalnego

    Określa, czy jest używane sortowanie kolumny zdalnej, czy serwera lokalnego.

    Jeśli to prawda, sortowanie kolumn zdalnych jest używane dla źródeł danych programu SQL Server, a sortowanie określone w nazwie sortowania jest używane dla źródeł danych innych niż SQL Server.

    Jeśli wartość jest fałszywa, zapytania rozproszone zawsze używają domyślnego sortowania serwera lokalnego, natomiast nazwa sortowania oraz sortowanie kolumn zdalnych są ignorowane. Wartość domyślna to false.

  • Nazwa sortowania

    Określa nazwę sortowania używanego przez zdalne źródło danych, jeśli użyj zdalnego sortowania ma wartość true, a źródło danych nie jest źródłem danych programu SQL Server. Nazwa musi być jednym z sortowania obsługiwanych przez program SQL Server.

    Użyj tej opcji podczas uzyskiwania dostępu do źródła danych OLE DB innego niż PROGRAM SQL Server, ale którego sortowanie jest zgodne z jednym z sortowania programu SQL Server.

    Serwer połączony musi obsługiwać pojedyncze sortowanie, które ma być używane dla wszystkich kolumn na tym serwerze. Nie należy ustawiać tej opcji, jeśli połączony serwer obsługuje wiele sortowania w jednym źródle danych lub jeśli sortowanie serwera połączonego nie może być określone w celu dopasowania do jednego z sortowania programu SQL Server.

  • Przekroczenie limitu czasu połączenia

    Wartość limitu czasu w sekundach na potrzeby nawiązywania połączenia z połączonym serwerem.

    Jeśli 0, użyj domyślnej wartości opcji limitu sp_configureczasu logowania zdalnego .

  • Limit czasu zapytania

    Wartość limitu czasu w sekundach dla zapytań względem serwera połączonego.

    Jeśli 0, użyj domyślnej sp_configure wartości opcji limitu czasu zapytania zdalnego .

  • Włączanie podwyższania poziomu transakcji rozproszonych

    Użyj tej opcji, aby chronić akcje procedury serwer-serwer za pośrednictwem transakcji koordynatora transakcji rozproszonej firmy Microsoft (MS DTC). Jeśli ta opcja ma wartość TRUE, wywołanie zdalnej procedury składowanej uruchamia transakcję rozproszoną i powoduje zarejestrowanie transakcji z usługą MS DTC. Aby uzyskać więcej informacji, zobacz sp_serveroption.

Zapisywanie serwera połączonego

Kliknij przycisk OK.

Wyświetlanie lub edytowanie opcji połączonego dostawcy serwera w programie SSMS

Wszyscy dostawcy nie mają tych samych opcji. Na przykład niektóre typy danych mają dostępne indeksy, a niektóre mogą nie. Użyj tego okna dialogowego, aby ułatwić programowi SQL Server zrozumienie możliwości dostawcy. Program SQL Server instaluje niektórych typowych dostawców danych, jednak gdy produkt udostępnia zmiany danych, dostawca zainstalowany przez program SQL Server może nie obsługiwać wszystkich najnowszych funkcji. Najlepszym źródłem informacji o możliwościach produktu dostarczającego dane jest dokumentacja tego produktu.

Aby otworzyć stronę Opcje połączonych dostawców serwera w programie SSMS:

  1. Otwórz Eksploratora obiektów.
  2. Rozwiń węzeł Obiekty serwera.
  3. Rozwiń węzeł Połączone serwery.
  4. Rozwiń węzeł Dostawcy.
  5. Kliknij prawym przyciskiem myszy dostawcę i wybierz polecenie Właściwości.

Opcje dostawcy są definiowane w następujący sposób:

  • Parametr dynamiczny

    Wskazuje, że dostawca zezwala na ? składnię znacznika parametrów dla sparametryzowanych zapytań. Ustaw tę opcję tylko wtedy, gdy dostawca obsługuje interfejs ICommandWithParameters i obsługuje ? jako znacznik parametru. Ustawienie tej opcji umożliwia programowi SQL Server wykonywanie sparametryzowanych zapytań względem dostawcy. Możliwość wykonywania sparametryzowanych zapytań względem dostawcy może spowodować lepszą wydajność niektórych zapytań.

  • Zagnieżdżone zapytania

    Wskazuje, że dostawca zezwala na zagnieżdżone SELECT instrukcje w klauzuli FROM . Ustawienie tej opcji umożliwia programowi SQL Server delegowanie niektórych zapytań do dostawcy, który wymaga zagnieżdżania SELECT instrukcji w klauzuli FROM .

  • Poziom zero tylko

    Tylko interfejsy OLE DB na poziomie 0 są wywoływane względem dostawcy.

  • Zezwalaj na przetwarzanie

    Program SQL Server umożliwia utworzenie wystąpienia dostawcy jako serwera przetwarzania. Jeśli ta opcja nie jest ustawiona, domyślne zachowanie polega na utworzeniu wystąpienia dostawcy poza procesem programu SQL Server. Utworzenie wystąpienia dostawcy poza procesem programu SQL Server chroni proces programu SQL Server przed błędami u dostawcy. Jeśli dostawca zostanie utworzone poza procesem programu SQL Server, aktualizacje lub wstawki odwołujące się do długich kolumn (tekst, ntekst lub obraz) nie są dozwolone.

  • Aktualizacje nieobsługiwane

    Program SQL Server zezwala na aktualizacje, nawet jeśli usługa ITransactionLocal nie jest dostępna. Jeśli ta opcja jest włączona, aktualizacje względem dostawcy nie są możliwe do odzyskania, ponieważ dostawca nie obsługuje transakcji.

  • Indeksowanie jako ścieżka dostępu

    Program SQL Server próbuje pobrać dane przy użyciu indeksów dostawcy. Domyślnie indeksy są używane tylko dla metadanych i nigdy nie są otwierane

  • Nie zezwalaj na dostęp ad hoc

    Program SQL Server nie zezwala na dostęp ad hoc za pośrednictwem funkcji OPENROWSET i OPENDATASOURCE względem dostawcy OLE DB. Jeśli ta opcja nie jest ustawiona, program SQL Server również nie zezwala na dostęp ad hoc.

  • Obsługuje operator "Like"

    Wskazuje, że dostawca obsługuje zapytania przy użyciu słowa kluczowego LIKE .

Tworzenie serwera połączonego przy użyciu Transact-SQL

Aby utworzyć serwer połączony przy użyciu języka Transact-SQL, użyj instrukcji sp_addlinkedserver, CREATE LOGIN i sp_addlinkedsrvlogin .

W tym przykładzie tworzony jest serwer połączony z innym wystąpieniem programu SQL Server przy użyciu języka Transact-SQL:

  1. W Edytorze zapytań wprowadź następujące polecenie Transact-SQL, aby połączyć się z wystąpieniem programu SQL Server o nazwie SRVR002\ACCTG:

    USE [master];
    GO
    
    EXECUTE master.dbo.sp_addlinkedserver
        @server = N'SRVR002\ACCTG',
        @srvproduct = N'SQL Server';
    GO
    
  2. Wykonaj następujący kod, aby skonfigurować serwer połączony do używania poświadczeń domeny logowania używającego serwera połączonego.

    EXECUTE master.dbo.sp_addlinkedsrvlogin
        @rmtsrvname = N'SRVR002\ACCTG',
        @locallogin = NULL,
        @useself = N'True';
    GO
    

Kroki do wykonania po utworzeniu połączonego serwera

Poniższe kroki ułatwiają weryfikację serwera połączonego.

Testowanie serwera połączonego

Biorąc pod uwagę jedną z następujących dwóch metod testowania uwierzytelniania połączonego serwera w bieżącym kontekście zabezpieczeń.

  • Aby przetestować możliwość nawiązania połączenia z połączonym serwerem w programie SSMS, przejdź do połączonego serwera w Eksploratorze obiektów, kliknij prawym przyciskiem myszy połączony serwer, a następnie wybierz polecenie Testuj połączenie.

  • Aby przetestować możliwość nawiązania połączenia z połączonym serwerem w języku T-SQL, wykonaj podstawową instrukcję, na przykład, aby pobrać podstawowe SELECT informacje o katalogu bazy danych. Ten przykład zwraca nazwy baz danych na połączonym serwerze.

    SELECT name
    FROM [SRVR002\ACCTG].master.sys.databases;
    GO
    

Łączenie tabel z serwera połączonego

Użyj nazw czterech części, aby odwoływać się do obiektu na serwerze połączonym. Wykonaj następujący kod, aby zwrócić listę wszystkich identyfikatorów logowania na serwerze lokalnym i ich pasujących identyfikatorów logowania na serwerze połączonym.

SELECT local.name AS LocalLogins,
       linked.name AS LinkedLogins
FROM master.sys.server_principals AS local
     LEFT OUTER JOIN [SRVR002\ACCTG].master.sys.server_principals AS linked
         ON local.name = linked.name;
GO

Gdy NULL zostanie zwrócona nazwa logowania serwera połączonego, oznacza to, że nazwa logowania nie istnieje na połączonym serwerze. Te loginy nie mogą używać połączonego serwera, chyba że połączony serwer jest skonfigurowany do przekazywania innego kontekstu zabezpieczeń lub akceptuje połączenia anonimowe.

Połączone serwery z usługą Azure SQL Managed Instance

Jeśli używasz usługi Azure SQL Managed Instance, zapoznaj się z następującymi przykładami z sp_addlinkedserver: