Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Hiermee maakt of werkt u een toewijzing bij tussen een aanmelding op het lokale exemplaar van SQL Server en een beveiligingsaccount op een externe server.
Transact-SQL syntaxis-conventies
Syntaxis
sp_addlinkedsrvlogin
[ @rmtsrvname = ] N'rmtsrvname'
[ , [ @useself = ] 'useself' ]
[ , [ @locallogin = ] N'locallogin' ]
[ , [ @rmtuser = ] N'rmtuser' ]
[ , [ @rmtpassword = ] N'rmtpassword' ]
[ ; ]
Argumenten
[ @rmtsrvname = ] N'rmtsrvname'
De naam van een gekoppelde server waarop de aanmeldingstoewijzing van toepassing is. @rmtsrvname is sysname, zonder standaardwaarde.
[ @useself = ] "useself"
Bepaalt of u verbinding wilt maken met rmtsrvname door lokale aanmeldingen te imiteren of expliciet een aanmelding en wachtwoord in te dienen.
@useself is varchar(8), met een standaardwaarde van true.
- Een waarde waarmee
truewordt opgegeven dat aanmeldingen hun eigen referenties gebruiken om verbinding te maken met @rmtsrvname, waarbij de argumenten @rmtuser en @rmtpassword worden genegeerd. -
falsegeeft aan dat de argumenten @rmtuser en @rmtpassword worden gebruikt om verbinding te maken met @rmtsrvname voor de opgegeven @locallogin.
Als @rmtuser en @rmtpassword zijn ingesteld NULL, wordt er geen aanmelding of wachtwoord gebruikt om verbinding te maken met de gekoppelde server.
[ @locallogin = ] N'locallogin'
Een aanmelding op de lokale server.
@locallogin is sysname, met een standaardwaarde van NULL.
NULL geeft aan dat deze vermelding van toepassing is op alle lokale aanmeldingen die verbinding maken met @rmtsrvname. Zo niet NULL, dan kan @locallogin een SQL Server-aanmelding of een Windows-account zijn. Het Windows-account moet rechtstreeks toegang hebben tot SQL Server of via lidmaatschap van een Windows-groep.
[ @rmtuser = ] N'rmtuser'
De externe aanmelding die wordt gebruikt om verbinding te maken met @rmtsrvname wanneer@useself.false
@rmtuser is sysname, met een standaardwaarde van NULL. Wanneer de externe server een exemplaar van SQL Server is dat geen gebruik maakt van Windows-verificatie, is @rmtuser een SQL Server-aanmelding.
[ @rmtpassword = ] N'rmtpassword'
Het wachtwoord dat is gekoppeld aan @rmtuser.
@rmtpassword is sysname, met een standaardwaarde van NULL.
Codewaarden retourneren
0 (geslaagd) of 1 (mislukt).
Opmerkingen
Wanneer een gebruiker zich aanmeldt bij de lokale server en een gedistribueerde query uitvoert die toegang heeft tot een tabel op de gekoppelde server, moet de lokale server zich namens de gebruiker aanmelden bij de gekoppelde server om toegang te krijgen tot die tabel. Gebruik sp_addlinkedsrvlogin dit om de referenties op te geven die de lokale server gebruikt om u aan te melden bij de gekoppelde server.
Opmerking
Als u de beste queryplannen wilt maken wanneer u een tabel op een gekoppelde server gebruikt, moet de queryprocessor gegevensdistributiestatistieken van de gekoppelde server hebben. Gebruikers met beperkte machtigingen voor kolommen van de tabel hebben mogelijk niet voldoende machtigingen om alle nuttige statistieken te verkrijgen en ontvangen mogelijk een minder efficiënt queryplan en ondervinden slechte prestaties. Als de gekoppelde server een exemplaar van SQL Server is, moet de gebruiker eigenaar zijn van de tabel of lid zijn van de vaste serverrol sysadmin , de db_owner vaste databaserol of de db_ddladmin vaste databaserol op de gekoppelde server. SQL Server 2012 SP1 (11.0.3x) wijzigt de machtigingsbeperkingen voor het verkrijgen van statistieken en stelt gebruikers met SELECT-machtiging in staat om toegang te krijgen tot statistieken die beschikbaar zijn via DBCC-SHOW_STATISTICS. Zie de sectie Machtigingen van DBCC SHOW_STATISTICS voor meer informatie.
Er wordt automatisch een standaardtoewijzing gemaakt tussen alle aanmeldingen op de lokale server en externe aanmeldingen op de gekoppelde sp_addlinkedserverserver. De standaardtoewijzing geeft aan dat SQL Server de gebruikersreferenties van de lokale aanmelding gebruikt bij het maken van verbinding met de gekoppelde server namens de aanmelding. Dit komt overeen met het uitvoeren met sp_addlinkedsrvlogin@useself ingesteld op true voor de gekoppelde server, zonder een lokale gebruikersnaam op te geven. Gebruik sp_addlinkedsrvlogin deze optie alleen om de standaardtoewijzing te wijzigen of om nieuwe toewijzingen toe te voegen voor specifieke lokale aanmeldingen. Als u de standaardtoewijzing of een andere toewijzing wilt verwijderen, gebruikt u sp_droplinkedsrvlogin.
In plaats van een vooraf vastgestelde aanmeldingstoewijzing te moeten maken sp_addlinkedsrvlogin , kan SQL Server automatisch de Windows-beveiligingsreferenties (Windows-aanmeldingsnaam en -wachtwoord) van een gebruiker gebruiken om verbinding te maken met een gekoppelde server wanneer alle volgende voorwaarden bestaan:
Een gebruiker is verbonden met SQL Server met behulp van de Windows-verificatiemodus.
Delegatie van beveiligingsaccounts is beschikbaar op de client en verzendende server.
De provider ondersteunt de Windows-verificatiemodus; Bijvoorbeeld SQL Server die wordt uitgevoerd in Windows.
Opmerking
Delegatie hoeft niet te worden ingeschakeld voor scenario's met één hop, maar is vereist voor scenario's met meerdere hops.
Nadat de verificatie is uitgevoerd door de gekoppelde server met behulp van de toewijzingen die zijn gedefinieerd door het sp_addlinkedsrvlogin lokale exemplaar van SQL Server, worden de machtigingen voor afzonderlijke objecten in de externe database bepaald door de gekoppelde server, niet door de lokale server.
sp_addlinkedsrvlogin kan niet worden uitgevoerd vanuit een door de gebruiker gedefinieerde transactie.
Machtigingen
Vereist ALTER ANY LOGIN-machtiging op de server.
Voorbeelden
Eén. Alle lokale aanmeldingen verbinden met de gekoppelde server met behulp van hun eigen gebruikersreferenties
In het volgende voorbeeld wordt een toewijzing gemaakt om ervoor te zorgen dat alle aanmeldingen bij de lokale server verbinding maken met de gekoppelde server Accounts met behulp van hun eigen gebruikersreferenties.
EXECUTE sp_addlinkedsrvlogin 'Accounts';
Of
EXECUTE sp_addlinkedsrvlogin 'Accounts', 'true';
Opmerking
Als er expliciete toewijzingen zijn gemaakt voor afzonderlijke aanmeldingen, hebben ze voorrang op globale toewijzingen die mogelijk bestaan voor die gekoppelde server.
B. Een specifieke aanmelding koppelen aan de gekoppelde server met behulp van verschillende gebruikersreferenties
In het volgende voorbeeld wordt een toewijzing gemaakt om ervoor te zorgen dat de Windows-gebruiker Domain\Mary verbinding maakt met de gekoppelde server Accounts met behulp van de aanmelding MaryP. Vervang <password> door een sterk wachtwoord.
EXECUTE sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', '<password>';
Waarschuwing
In dit voorbeeld wordt geen Gebruikgemaakt van Windows-verificatie. Wachtwoorden worden niet-versleuteld verzonden. Wachtwoorden zijn mogelijk zichtbaar in definities van gegevensbronnen en scripts die zijn opgeslagen op schijf, in back-ups en in logboekbestanden. Gebruik nooit een beheerderswachtwoord in dit type verbinding. Neem contact op met uw netwerkbeheerder voor beveiligingsrichtlijnen die specifiek zijn voor uw omgeving.
C. Specifieke lokale aanmelding toewijzen aan een externe serveraanmelding
In sommige gevallen, zoals met Azure SQL Managed Instance, moet u een toewijzing maken tussen een aanmelding op de lokale server om een Transact-SQL -query (T-SQL) uit te voeren op een externe server via een gekoppelde server, een toewijzing maken tussen een aanmelding op de lokale server naar een aanmelding op de externe server die gemachtigd is om de T-SQL-query uit te voeren. Wanneer de SQL Agent-taak via de gekoppelde server verbinding maakt met de externe server, wordt de T-SQL-query uitgevoerd in de context van de externe aanmelding, die over de benodigde machtigingen moet beschikken om de T-SQL-query uit te voeren.
Als u aanmeldingen toe wijzen voor een SQL Agent-taak in Azure SQL Managed Instance, moet de lokale aanmelding die u toe wijst aan de externe aanmelding de eigenaar van de SQL Agent-taak zijn, tenzij de SQL Agent-taak sysadmin is. In dat geval moet u alle lokale aanmeldingen toewijzen. Raadpleeg SQL Agent-taken met Azure SQL Managed Instance voor meer informatie.
Voer de volgende voorbeeldopdracht uit op de lokale server om de lokale aanmelding local_login_name toe te wijzen aan de externe serveraanmelding login_name wanneer u verbinding maakt met de gekoppelde server 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. Alle lokale aanmeldingen toewijzen aan een externe serveraanmelding
Door deze instelling in te NULLstellenlocallogin, kunt u alle lokale aanmeldingen toewijzen aan een aanmelding op de externe server.
Toewijzing van alle lokale aanmeldingen aan een externe serveraanmelding is vereist bij het uitvoeren van een Azure SQL Managed Instance SQL Agent-taak die eigendom is van sysadmin die een query uitvoert op een externe server via een gekoppelde server. Raadpleeg SQL Agent-taken met Azure SQL Managed Instance voor meer informatie. Wanneer de SQL Agent-taak via de gekoppelde server verbinding maakt met de externe server, wordt de T-SQL-query uitgevoerd in de context van de externe aanmelding, die over de benodigde machtigingen moet beschikken om de T-SQL-query uit te voeren.
Voer de volgende voorbeeldopdracht uit op de lokale server om alle lokale aanmeldingen toe te wijzen aan de aanmelding van de externe server login_name wanneer u verbinding maakt met de gekoppelde server remote_server:
EXECUTE master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'<remote_server>',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'<login_name>',
@rmtpassword = '<login_password>';
E. Gekoppelde aanmeldingen controleren
In het volgende voorbeeld ziet u alle aanmeldingen die zijn toegewezen voor een gekoppelde 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;