Dela via


Skapa länkade servrar (SQL Server Database Engine)

gäller för:SQL ServerAzure SQL Managed Instance

Den här artikeln visar hur du skapar en länkad server och får åtkomst till data från en annan SQL Server, en Hanterad Azure SQL-instans eller en annan datakälla med hjälp av SQL Server Management Studio (SSMS) eller Transact-SQL. Länkade servrar gör det möjligt för SQL Server-databasmotorn och Azure SQL Managed Instance att läsa data från fjärrdatakällorna och köra kommandon mot fjärrdatabasservrarna (till exempel OLE DB-datakällor) utanför SQL Server-instansen.

Bakgrund

Länkade servrar är vanligtvis konfigurerade för att göra det möjligt för databasmotorn att köra en Transact-SQL-instruktion som innehåller tabeller i en annan instans av SQL Server eller någon annan databasprodukt som Oracle. Många typer av datakällor kan konfigureras som länkade servrar, inklusive databasprovidrar från tredje part och Azure Cosmos DB.

När en länkad server har skapats kan distribuerade frågor köras mot den här servern och frågor kan koppla tabeller från mer än en datakälla. Om den länkade servern definieras som en instans av SQL Server eller en Azure SQL Managed Instance kan fjärr lagrade procedurer köras.

Funktionerna och de argument som krävs för den länkade servern kan variera avsevärt. Exemplen i den här artikeln är ett typiskt exempel, men alla alternativ beskrivs inte. Mer information finns i sp_addlinkedserver.

Behörigheter

När du använder Transact-SQL-instruktioner måste du ha ALTER ANY LINKED SERVER behörighet på servern eller medlemskapet i den fasta serverrollen setupadmin . När du använder Management Studio krävs CONTROL SERVER behörighet eller medlemskap i den fasta serverrollen sysadmin .

Skapa en länkad server med SSMS

Skapa en länkad server med SSMS med hjälp av följande procedur:

Öppna dialogrutan Ny länkad server

I SQL Server Management Studio (SSMS):

  1. Öppna Object Explorer.
  2. Expandera serverobjekt.
  3. Högerklicka på Länkade servrar.
  4. Välj Ny länkad server.

Redigera sidan Allmänt för de länkade serveregenskaperna

  1. På sidan Allmänt i rutan Länkad server skriver du namnet på instansen av SQL Server- som du länkar till.

    Notera

    Om instansen av SQL Server är standardinstansen anger du namnet på den dator som är värd för instansen av SQL Server. Om SQL Server- är en namngiven instans anger du namnet på datorn och namnet på instansen, till exempel Accounting\SQLExpress.

  2. Ange servertyp och relaterad information om det behövs:

    • SQL Server

      Identifiera den länkade servern som en instans av Microsoft SQL Server eller en Hanterad Azure SQL-instans. Om du använder den här metoden för att definiera en länkad server måste namnet som anges i länkad server vara serverns nätverksnamn. Dessutom kommer alla tabeller som hämtas från servern från standarddatabasen som definierats för inloggningen på den länkade servern.

    • Annan datakälla

      Ange en annan OLE DB-servertyp än SQL Server. Välj det här alternativet för att aktivera alternativ.

    • Leverantör

      Välj en OLE DB-datakälla i listrutan. OLE DB-providern är registrerad med angiven PROGID i registret.

    • Produktnamn

      Ange produktnamnet för OLE DB-datakällan som ska läggas till som en länkad server.

    • datakälla

      Ange namnet på datakällan enligt ole db-providerns tolkning. Om du ansluter till en instans av SQL Server anger du instansnamnet.

    • Providersträng

      Ange den unika programmatiska identifieraren (PROGID) för OLE DB-providern som motsvarar datakällan. Exempel på giltiga providersträngar finns i sp_addlinkedserver.

    • plats

      Ange platsen för databasen enligt ole db-providerns tolkning.

    • Katalog

      Ange namnet på katalogen som ska användas när du upprättar en anslutning till OLE DB-providern.

Redigera sidan Säkerhet för de länkade serveregenskaperna

På sidan Security anger du den säkerhetskontext som används när den ursprungliga instansen ansluter till den länkade servern. Det finns två strategier för att konfigurera här som kan användas ensam eller kombineras. Den första är att mappa inloggningar från den lokala servern till fjärrservern, och den andra är hur den länkade servern ska hantera inloggningar som inte mappas.

Lägga till inloggningsmappningar

Du kan också ange hur specifika lokala serverinloggningar ska autentiseras med den länkade servern.

Under Lokal serverinloggning till fjärrserverns inloggningsmappningarupprepar du följande process för varje inloggning som du vill mappa:

  1. Välj Lägg till.

  2. Ange ett lokalt användarkonto.

    Ange den lokala inloggning som kan ansluta till den länkade servern. Den lokala inloggningen kan vara antingen en inloggning med SQL Server-autentisering eller en Windows-autentiseringsinloggning. Det går inte att använda en Windows-grupp eller en oberoende databasanvändare. Använd den här listan om du vill begränsa anslutningen till specifika inloggningar eller tillåta att vissa inloggningar ansluter som en annan inloggning.

    Notera

    Vanliga problem med länkade servrar som använder Windows-autentisering till en SQL Server-fjärrinstans beror på problem med tjänstens huvudnamn (SPN). Mer information finns i Service Principal Name (SPN)-stöd i Klientanslutningar. Microsoft Kerberos Configuration Manager för SQL Server är ett diagnostikverktyg som hjälper dig att felsöka Kerberos-relaterade anslutningsproblem med SQL Server. Mer information finns i Microsoft Kerberos Configuration Manager för SQL Server.

  3. Välj Impersonera (valfritt).

    Skicka användarnamnet och lösenordet från den lokala inloggningen till den länkade servern. För SQL Server-autentisering måste det finnas en inloggning med exakt samma namn och lösenord på fjärrservern. För Windows-inloggningar måste inloggningen vara en giltig inloggning på den länkade servern.

    Om du vill använda personifiering måste konfigurationen uppfylla kravet på delegering.

  4. Ange en fjärranvändare om du inte använder imitering.

    Använd fjärranvändaren för att mappa användare som definierats i Lokal inloggning. Fjärranvändaren måste ha en SQL Server-autentiseringsinlogg på fjärrservern.

  5. Ange ett fjärrlösenord om du inte använder personifiering.

    Ange lösenordet för fjärranvändaren.

  6. Välj Ta bort om du vill ta bort en befintlig lokal inloggning.

Ange standardsäkerhetskontexten för inloggningar som inte finns i mappningslistan

I en domänmiljö där användare ansluter med hjälp av sina domäninloggningar är det ofta det bästa valet att välja Göras med hjälp av inloggningens aktuella säkerhetskontext. När användarna ansluter till den ursprungliga SQL Server- med hjälp av en SQL Server- inloggning, är det bästa valet ofta att välja Genom att använda den här säkerhetskontextenoch sedan ange nödvändiga autentiseringsuppgifter för att autentisera på den länkade servern.

Välj något av följande alternativ:

  • Ska inte göras

    En anslutning görs inte för inloggningar som inte definierats i listan.

  • Göras utan att använda en säkerhetskontext

    En anslutning görs utan att använda en säkerhetskontext för inloggningar som inte definierats i listan.

  • Görs med inloggningens aktuella säkerhetskontext

    En anslutning görs med den aktuella säkerhetskontexten för inloggningen för inloggningar som inte har definierats i listan. Om du är ansluten till den lokala servern med Windows-autentisering används dina Windows-autentiseringsuppgifter för att ansluta till fjärrservern. Om du är ansluten till den lokala servern med SQL Server-autentisering används ditt inloggningsnamn och lösenord för att ansluta till fjärrservern. I det här fallet måste det finnas en inloggning med exakt samma namn och lösenord på fjärrservern.

  • Görs med hjälp av den här säkerhetskontexten

    En anslutning upprättas med inloggningen och lösenordet som anges i rutorna Fjärrinloggning och Med lösenord för inloggningar som inte definierats i listan. Fjärrinloggningen måste vara en SQL Server-autentiseringsinloggning på fjärrservern.

Försiktighet

Om en länkad server har konfigurerats med alternativet Görs med den här säkerhetskontextenkan alla användare på instansen komma åt den fjärrlänkade servern med hjälp av den här kontexten. Detta kan ha den oavsiktliga risken för missbruk eller skadlig intern åtkomst. Den SQL-autentiserade Fjärrinloggning som tillhandahålls till den länkade servern bör beviljas minsta nödvändiga behörigheter på fjärrservern, för att säkerställa en princip med minsta möjliga behörighet och minska attackytan.

Redigera sidan Serveralternativ i egenskaper för länkad server (valfritt)

Om du vill visa eller ange serveralternativ väljer du sidan Serveralternativ. Du kan redigera något av följande alternativ:

  • sorteringskompatibel

    Påverkar körning av distribuerad fråga mot länkade servrar. Om det här alternativet är inställt på sant förutsätter SQL Server att alla tecken på den länkade servern är kompatibla med den lokala servern, när det gäller teckenuppsättning och sorteringssekvens (eller sorteringsordning). Detta gör det möjligt för SQL Server att skicka jämförelser på teckenkolumner till providern. Om det här alternativet inte har angetts utvärderar SQL Server alltid jämförelser på teckenkolumner lokalt.

    Det här alternativet bör endast anges om det är säkert att datakällan som motsvarar den länkade servern har samma teckenuppsättning och sorteringsordning som den lokala servern.

  • Dataåtkomst

    Aktiverar och inaktiverar en länkad server för distribuerad frågeåtkomst.

  • RPC-

    Aktiverar fjärrproceduranrop (RPC) från den angivna servern.

  • RPC Out

    Aktiverar RPC på den angivna servern.

  • Använda fjärrsortering

    Avgör om sortering av en fjärrkolumn eller en lokal server används.

    Om det är sant används sortering av fjärrkolumner för SQL Server-datakällor, och sorteringen som anges i sorteringsnamnet används för datakällor som inte är SQL Server.

    Om det är falskt använder distribuerade frågor alltid standardsortering av den lokala servern, medan sorteringsnamn och sortering av fjärrkolumner ignoreras. Standardvärdet är falskt.

  • sorteringsnamn

    Anger namnet på sorteringen som används av fjärrdatakällan om fjärrsortering är sant och datakällan inte är en SQL Server-datakälla. Namnet måste vara en av de sorteringsordningar som stöds av SQL Server.

    Använd det här alternativet när du kommer åt en annan OLE DB-datakälla än SQL Server, men vars sortering matchar en av SQL Server-sorteringarna.

    Den länkade servern måste ha stöd för en enda sortering som ska användas för alla kolumner på servern. Ange inte det här alternativet om den länkade servern stöder flera sorteringar i en enda datakälla, eller om den länkade serverns sortering inte kan fastställas matcha en av SQL Server-sorteringarna.

  • Tidsgräns för anslutning

    Timeout-värde i sekunder för anslutning till en länkad server.

    Om 0 används, använd standardvärdet för sp_configuretimeout för fjärrinloggning.

  • Tidsgräns för frågor

    Timeout-värde i sekunder för frågor mot en länkad server.

    Om 0använder du sp_configure standardvärdet för timeout-alternativ för fjärrfrågor .

  • Aktivera befordran av distribuerade transaktioner

    Använd det här alternativet för att skydda åtgärderna för en server-till-server-procedur via en Microsoft Distributed Transaction Coordinator-transaktion (MS DTC). När det här alternativet är TRUE startar anrop av en fjärrlagrad procedur en distribuerad transaktion och registrerar transaktionen med MS DTC. Mer information finns i sp_serveroption.

Spara den länkade servern

Välj OK.

Visa eller redigera alternativ för länkad serverprovider i SSMS

Alla leverantörer har inte samma tillgängliga alternativ. Vissa typer av data har till exempel tillgängliga index och andra kanske inte. Använd den här dialogrutan för att hjälpa SQL Server att förstå providerns funktioner. SQL Server installerar några vanliga dataprovidrar, men när produkten som tillhandahåller data ändras kanske providern som installeras av SQL Server inte stöder alla de senaste funktionerna. Den bästa källan till information om funktionerna i produkten som tillhandahåller data är dokumentationen för den produkten.

Så här öppnar du sidan för den länkade serverns Provideralternativ i SSMS:

  1. Öppna Object Explorer.
  2. Expandera serverobjekt.
  3. Expandera länkade servrar.
  4. Expandera Leverantörer.
  5. Högerklicka på en leverantör och välj Egenskaper.

Provideralternativ definieras på följande sätt:

  • Dynamisk parameter

    Anger att providern tillåter ? parametermarkörsyntax för parametriserade frågor. Ange endast det här alternativet om providern stöder gränssnittet ICommandWithParameters och stöder en ? som parametermarkör. Om du anger det här alternativet kan SQL Server köra parametriserade frågor mot providern. Möjligheten att köra parametriserade frågor mot providern kan ge bättre prestanda för vissa frågor.

  • Kapslade frågor

    Anger att leverantören tillåter kapslade SELECT uttryck i FROM-satsen. Om du anger det här alternativet kan SQL Server delegera vissa frågor till leverantören som kräver att kapslingssatser SELECT finns i FROM -satsen.

  • endast nivå noll

    Endast OLE DB-gränssnitt på nivå 0 anropas mot providern.

  • Tillåt inprocess

    SQL Server gör att providern kan instansieras som en processerver. När det här alternativet inte har angetts är standardbeteendet att instansiera providern utanför SQL Server-processen. Om du instansierar providern utanför SQL Server-processen skyddas SQL Server-processen från fel i providern. När providern instansieras utanför SQL Server-processen tillåts inte uppdateringar eller infogningar som refererar till långa kolumner (text, ntexteller bild).

  • Icke-transaktionsuppdateringar

    SQL Server tillåter uppdateringar, även om ITransactionLocal inte är tillgänglig. Om det här alternativet är aktiverat kan uppdateringar mot providern inte återställas eftersom providern inte stöder transaktioner.

  • Index som åtkomstsökväg

    SQL Server försöker använda providerns index för att hämta data. Som standard används index endast för metadata och öppnas aldrig

  • Tillåt inte ad hoc-åtkomst

    SQL Server tillåter inte ad hoc-åtkomst via funktionerna OPENROWSET och OPENDATASOURCE mot OLE DB-providern. När det här alternativet inte har angetts tillåter INTE HELLER SQL Server ad hoc-åtkomst.

  • stöder operatorn "Like"

    Anger att providern stöder frågor med nyckelordet LIKE .

Skapa en länkad server med Transact-SQL

Om du vill skapa en länkad server med hjälp av Transact-SQL använder du sp_addlinkedserver, CREATE LOGIN och sp_addlinkedsrvlogin.

Det här exemplet skapar en länkad server till en annan instans av SQL Server med Transact-SQL:

  1. I Frågeredigeraren anger du följande Transact-SQL kommando för att länka till en instans av SQL Server med namnet SRVR002\ACCTG:

    USE [master];
    GO
    
    EXECUTE master.dbo.sp_addlinkedserver
        @server = N'SRVR002\ACCTG',
        @srvproduct = N'SQL Server';
    GO
    
  2. Kör följande kod för att konfigurera den länkade servern att använda domänautentiseringsuppgifterna för inloggningen som använder den länkade servern.

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

Följ upp: Steg att vidta när du har skapat en länkad server

Följande steg hjälper dig att verifiera en länkad server.

Testa den länkade servern

Överväg någon av följande två metoder för att testa en länkad servers autentisering i din aktuella säkerhetskontext.

  • Om du vill testa möjligheten att ansluta till en länkad server i SSMS bläddrar du till den länkade servern i Object Explorer, högerklickar på den länkade servern och väljer sedan Testa anslutning.

  • Om du vill testa möjligheten att ansluta till en länkad server i T-SQL kör du en grundläggande SELECT instruktion, till exempel för att hämta grundläggande databaskataloginformation. Det här exemplet returnerar namnen på databaserna på den länkade servern.

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

Koppla tabeller från en länkad server

Använd namn i fyra delar för att referera till ett objekt på en länkad server. Kör följande kod för att returnera en lista över alla inloggningar på den lokala servern och deras matchande inloggningar på den länkade servern.

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

När NULL returneras för den länkade serverinloggningen anger det att inloggningen inte finns på den länkade servern. Dessa inloggningar kan inte använda den länkade servern om inte den länkade servern har konfigurerats för att skicka en annan säkerhetskontext eller om den länkade servern accepterar anonyma anslutningar.

Länkade servrar med Azure SQL Managed Instance

Om du använder Azure SQL Managed Instance kan du se följande exempel från sp_addlinkedserver: