Dela via


sp_addlinkedsrvlogin (Transact-SQL)

gäller för:SQL Server

Skapar eller uppdaterar en mappning mellan en inloggning på den lokala instansen av SQL Server och ett säkerhetskonto på en fjärrserver.

Transact-SQL syntaxkonventioner

Syntax

sp_addlinkedsrvlogin
    [ @rmtsrvname = ] N'rmtsrvname'
    [ , [ @useself = ] 'useself' ]
    [ , [ @locallogin = ] N'locallogin' ]
    [ , [ @rmtuser = ] N'rmtuser' ]
    [ , [ @rmtpassword = ] N'rmtpassword' ]
[ ; ]

Argumentpunkter

[ @rmtsrvname = ] N'rmtsrvname'

Namnet på en länkad server som inloggningsmappningen gäller för. @rmtsrvname är sysname, utan standard.

[ @useself = ] "useself"

Avgör om du vill ansluta till rmtsrvname genom att personifiera lokala inloggningar eller uttryckligen skicka en inloggning och ett lösenord. @useself är varchar(8), med standardvärdet true.

  • Värdet true anger att inloggningar använder sina egna autentiseringsuppgifter för att ansluta till @rmtsrvname, där argumenten @rmtuser och @rmtpassword ignoreras.
  • false anger att argumenten @rmtuser och @rmtpassword används för att ansluta till @rmtsrvname för den angivna @locallogin.

Om @rmtuser och @rmtpassword är inställda NULLpå används ingen inloggning eller lösenord för att ansluta till den länkade servern.

[ @locallogin = ] N'locallogin'

En inloggning på den lokala servern. @locallogin är sysname med standardvärdet NULL. NULL anger att den här posten gäller för alla lokala inloggningar som ansluter till @rmtsrvname. Om inte NULLkan @locallogin vara en SQL Server-inloggning eller ett Windows-konto. Windows-kontot måste ha åtkomst till SQL Server direkt eller genom medlemskap i en Windows-grupp.

[ @rmtuser = ] N'rmtuser'

Fjärrinloggningen som används för att ansluta till @rmtsrvname när @useself är false. @rmtuser är sysname med standardvärdet NULL. När fjärrservern är en instans av SQL Server som inte använder Windows-autentisering är @rmtuser en SQL Server-inloggning.

[ @rmtpassword = ] N'rmtpassword'

Lösenordet som är associerat med @rmtuser. @rmtpassword är sysname med standardvärdet NULL.

Returnera kodvärden

0 (lyckades) eller 1 (fel).

Anmärkningar

När en användare loggar in på den lokala servern och kör en distribuerad fråga som kommer åt en tabell på den länkade servern, måste den lokala servern logga in på den länkade servern för användarens räkning för att få åtkomst till tabellen. Använd sp_addlinkedsrvlogin för att ange de autentiseringsuppgifter som den lokala servern använder för att logga in på den länkade servern.

Anmärkning

Om du vill skapa de bästa frågeplanerna när du använder en tabell på en länkad server måste frågeprocessorn ha datadistributionsstatistik från den länkade servern. Användare som har begränsad behörighet för alla kolumner i tabellen kanske inte har tillräckliga behörigheter för att få all användbar statistik och kan få en mindre effektiv frågeplan och få dåliga prestanda. Om den länkade servern är en instans av SQL Server måste användaren äga tabellen eller vara medlem i den fasta serverrollen sysadmin , db_owner fast databasroll eller db_ddladmin fast databasroll på den länkade servern. SQL Server 2012 SP1 (11.0.3x) ändrar behörighetsbegränsningarna för att hämta statistik och tillåter användare med SELECT-behörighet att komma åt statistik som är tillgänglig via DBCC SHOW_STATISTICS. Mer information finns i avsnittet Behörigheter i DBCC-SHOW_STATISTICS.

En standardmappning mellan alla inloggningar på den lokala servern och fjärrinloggningar på den länkade servern skapas automatiskt genom att sp_addlinkedserverköra . Standardmappningen anger att SQL Server använder autentiseringsuppgifterna för den lokala inloggningen när du ansluter till den länkade servern för inloggningen. Detta motsvarar körning sp_addlinkedsrvlogin med @useself inställd true på för den länkade servern, utan att ange ett lokalt användarnamn. Använd sp_addlinkedsrvlogin bara för att ändra standardmappningen eller för att lägga till nya mappningar för specifika lokala inloggningar. Om du vill ta bort standardmappningen eller någon annan mappning använder du sp_droplinkedsrvlogin.

I stället för att behöva använda sp_addlinkedsrvlogin för att skapa en fördefinierad inloggningsmappning kan SQL Server automatiskt använda Windows-säkerhetsautentiseringsuppgifterna (Windows inloggningsnamn och lösenord) för en användare som utfärdar frågan för att ansluta till en länkad server när följande villkor finns:

  • En användare är ansluten till SQL Server med hjälp av Windows-autentiseringsläge.

  • Delegering av säkerhetskonto är tillgängligt på klienten och skickar servern.

  • Providern stöder Windows-autentiseringsläge. till exempel SQL Server som körs i Windows.

Anmärkning

Delegering behöver inte aktiveras för scenarier med enkelhopp, men det krävs för scenarier med flera hopp.

När autentiseringen har utförts av den länkade servern med hjälp av de mappningar som definieras genom körning sp_addlinkedsrvlogin på den lokala instansen av SQL Server, bestäms behörigheterna för enskilda objekt i fjärrdatabasen av den länkade servern, inte den lokala servern.

sp_addlinkedsrvlogin kan inte köras inifrån en användardefinierad transaktion.

Behörigheter

Kräver ALTER ANY LOGIN-behörighet på servern.

Exempel

A. Anslut alla lokala inloggningar till den länkade servern med sina egna användarautentiseringsuppgifter

I följande exempel skapas en mappning för att se till att alla inloggningar till den lokala servern ansluter till den länkade servern Accounts med sina egna användarautentiseringsuppgifter.

EXECUTE sp_addlinkedsrvlogin 'Accounts';

Eller

EXECUTE sp_addlinkedsrvlogin 'Accounts', 'true';

Anmärkning

Om det finns explicita mappningar som skapats för enskilda inloggningar har de företräde framför alla globala mappningar som kan finnas för den länkade servern.

B. Ansluta en specifik inloggning till den länkade servern med hjälp av olika användarautentiseringsuppgifter

I följande exempel skapas en mappning för att se till att Windows-användaren Domain\Mary ansluter till den länkade servern Accounts med hjälp av inloggningen MaryP. Ersätt <password> med ett starkt lösenord.

EXECUTE sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', '<password>';

Försiktighet

Det här exemplet använder inte Windows-autentisering. Lösenord överförs okrypterade. Lösenord kan vara synliga i definitioner och skript för datakällor som sparas på diskar, i säkerhetskopior och i loggfiler. Använd aldrig ett administratörslösenord i den här typen av anslutning. Kontakta nätverksadministratören om du vill ha säkerhetsvägledning som är specifik för din miljö.

C. Mappa specifik lokal inloggning till en fjärrserverinloggning

I vissa fall, till exempel med Azure SQL Managed Instance, för att köra ett SQL Agent-jobb som kör en Transact-SQL -fråga (T-SQL) på en fjärrserver via en länkad server, måste du skapa en mappning mellan en inloggning på den lokala servern till en inloggning på fjärrservern som har behörighet att köra T-SQL-frågan. När SQL Agent-jobbet ansluter till fjärrservern via den länkade servern körs T-SQL-frågan i kontexten för fjärrinloggningen, som måste ha de behörigheter som krävs för att köra T-SQL-frågan.

Om du mappar inloggningar för ett SQL Agent-jobb i Azure SQL Managed Instancemåste den lokala inloggning som du mappar till fjärrinloggningen vara ägare till SQL Agent-jobbet, såvida inte SQL Agent-jobbet är sysadmin, i vilket fall du ska mappa alla lokala inloggningar. Mer information finns i SQL Agent-jobb med Azure SQL Managed Instance.

Kör följande exempelkommando på den lokala servern för att mappa den lokala inloggningen local_login_name till fjärrserverns inloggning login_name när du ansluter till den länkade servern remote_server:

EXECUTE master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname = N'<remote_server>',
    @useself = N'False',
    @locallogin = N'<local_login_name>',
    @rmtuser = N'<login_name>',
    @rmtpassword = '<login_password>';

D. Mappa alla lokala inloggningar till en fjärrserverinloggning

Genom att ange locallogin till NULLkan du mappa alla lokala inloggningar till en inloggning på fjärrservern.

Mappning av alla lokala inloggningar till en fjärrserverinloggning krävs när du kör ett Azure SQL Managed Instance SQL Agent-jobb som ägs av sysadmin och som frågar en fjärrserver via en länkad server. Mer information finns i SQL Agent-jobb med Azure SQL Managed Instance. När SQL Agent-jobbet ansluter till fjärrservern via den länkade servern körs T-SQL-frågan i kontexten för fjärrinloggningen, som måste ha de behörigheter som krävs för att köra T-SQL-frågan.

Kör följande exempelkommando på den lokala servern för att mappa alla lokala inloggningar till fjärrserverns inloggning login_name när du ansluter till den länkade servern remote_server:

EXECUTE master.dbo.sp_addlinkedsrvlogin
    @rmtsrvname = N'<remote_server>',
    @useself = N'False',
    @locallogin = NULL,
    @rmtuser = N'<login_name>',
    @rmtpassword = '<login_password>';

E. Kontrollera länkade inloggningar

I följande exempel visas alla inloggningar som har mappats för en länkad server:

SELECT s.name AS server_name, ll.remote_name, sp.name AS principal_name
FROM sys.servers s
INNER JOIN sys.linked_logins ll
    ON s.server_id = ll.server_id
INNER JOIN sys server_principals sp
    ON ll.local_principal_id = sp.principal_id
WHERE s.is_linked = 1;