Sdílet prostřednictvím


sp_addlinkedsrvlogin (Transact-SQL)

platí pro:SQL Server

Vytvoří nebo aktualizuje mapování mezi přihlášením v místní instanci SQL Serveru a účtem zabezpečení na vzdáleném serveru.

Transact-SQL konvence syntaxe

Syntaxe

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

Argumenty

[ @rmtsrvname = ] N'rmtsrvname'

Název propojeného serveru, na který se vztahuje mapování přihlášení. @rmtsrvname je sysname bez výchozího nastavení.

[ @useself = ] 'useself'

Určuje, jestli se chcete připojit k rmtsrvname zosobněním místních přihlášení nebo explicitním odesláním přihlašovacího jména a hesla. @useself je varchar(8) s výchozím nastavením true.

  • Hodnota true určuje, že přihlášení používají k připojení k @rmtsrvname vlastní přihlašovací údaje, přičemž @rmtuser a @rmtpassword argumenty se ignorují.
  • false určuje, že @rmtuser aargumenty @rmtpassword slouží k připojení k @rmtsrvname pro zadané @locallogin.

Pokud jsou @rmtuser a @rmtpassword nastaveny na NULLhodnotu , k připojení k propojenému serveru se nepoužívá žádné přihlašovací jméno nebo heslo.

[ @locallogin = ] N'locallogin'

Přihlášení na místním serveru. @locallogin je sysname, s výchozím nastavením NULL. NULL určuje, že tato položka se vztahuje na všechna místní přihlášení, která se připojují k @rmtsrvname. Pokud ne NULL, @locallogin může být přihlášení k SQL Serveru nebo účet systému Windows. Účet Windows musí mít přístup k SQL Serveru přímo nebo prostřednictvím členství ve skupině Windows.

[ @rmtuser = ] N'rmtuser'

Vzdálené přihlášení použité k připojení k @rmtsrvname , pokud @useself je false. @rmtuser je sysname s výchozím nastavením NULL. Pokud je vzdálený server instancí SQL Serveru, který nepoužívá ověřování systému Windows, @rmtuser je přihlášení k SQL Serveru.

[ @rmtpassword = ] N'rmtpassword'

Heslo přidružené k @rmtuser. @rmtpassword je sysname s výchozím nastavením NULL.

Hodnoty návratového kódu

0 (úspěch) nebo 1 (selhání).

Poznámky

Když se uživatel přihlásí k místnímu serveru a spustí distribuovaný dotaz, který přistupuje k tabulce na propojeném serveru, musí se místní server přihlásit k propojenému serveru jménem uživatele, aby k této tabulce měl přístup. Slouží sp_addlinkedsrvlogin k zadání přihlašovacích údajů, které místní server používá k přihlášení k propojenému serveru.

Poznámka:

Pokud chcete vytvořit nejlepší plány dotazů při použití tabulky na propojeném serveru, musí procesor dotazů mít statistiky distribuce dat z propojeného serveru. Uživatelé, kteří mají omezená oprávnění pro všechny sloupce tabulky, nemusí mít dostatečná oprávnění k získání všech užitečných statistik a mohou obdržet méně efektivní plán dotazů a mít nízký výkon. Pokud je propojený server instancí SYSTÉMU SQL Server, aby získal všechny dostupné statistiky, musí uživatel vlastnit tabulku nebo být členem pevné role serveru správce systému , db_owner pevné databázové role nebo db_ddladmin pevné databázové role na propojeném serveru. SQL Server 2012 SP1 (11.0.3x) upravuje omezení oprávnění pro získání statistik a umožňuje uživatelům s oprávněním SELECT přistupovat ke statistikám dostupným prostřednictvím dbCC SHOW_STATISTICS. Další informace najdete v části Oprávnění SHOW_STATISTICS DBCC.

Výchozí mapování mezi všemi přihlášeními na místním serveru a vzdálenými přihlášeními na propojeném serveru se automaticky vytvoří spuštěním sp_addlinkedserver. Výchozí mapování uvádí, že SQL Server používá přihlašovací údaje uživatele místního přihlášení při připojování k propojenému serveru jménem přihlášení. To je ekvivalentem sp_addlinkedsrvlogin spuštění s nastaveným @useself na true odkazovaný server bez zadání místního uživatelského jména. Slouží sp_addlinkedsrvlogin pouze ke změně výchozího mapování nebo k přidání nových mapování pro konkrétní místní přihlášení. Chcete-li odstranit výchozí mapování nebo jakékoli jiné mapování, použijte sp_droplinkedsrvlogin.

Místo toho, abyste museli sp_addlinkedsrvlogin vytvořit předem definované mapování přihlášení, SQL Server může automaticky používat přihlašovací údaje zabezpečení Systému Windows (přihlašovací jméno a heslo Systému Windows) uživatele, který dotaz vydává pro připojení k propojenému serveru, pokud existují všechny následující podmínky:

  • Uživatel je připojen k SQL Serveru pomocí režimu ověřování systému Windows.

  • Delegování účtu zabezpečení je k dispozici na klientovi a odesílajícím serveru.

  • Zprostředkovatel podporuje režim ověřování systému Windows; Například SQL Server spuštěný ve Windows.

Poznámka:

Delegování nemusí být povolené pro scénáře s jedním segmentem směrování, ale vyžaduje se pro scénáře s více segmenty směrování.

Po provedení ověřování propojeným serverem pomocí mapování definovaných spuštěním sp_addlinkedsrvlogin v místní instanci SYSTÉMU SQL Server jsou oprávnění k jednotlivým objektům ve vzdálené databázi určena propojeným serverem, nikoli místním serverem.

sp_addlinkedsrvlogin nelze provést v rámci uživatelem definované transakce.

Povolení

Vyžaduje na serveru oprávnění ALTER ANY LOGIN.

Příklady

A. Připojení všech místních přihlášení k propojenému serveru pomocí vlastních přihlašovacích údajů uživatele

Následující příklad vytvoří mapování, které zajistí, aby se všechna přihlášení k místnímu serveru připojila k propojenému serveru Accounts pomocí vlastních přihlašovacích údajů uživatele.

EXECUTE sp_addlinkedsrvlogin 'Accounts';

Nebo

EXECUTE sp_addlinkedsrvlogin 'Accounts', 'true';

Poznámka:

Pokud existují explicitní mapování vytvořená pro jednotlivá přihlášení, mají přednost před všemi globálními mapováními, která mohou existovat pro daný propojený server.

B. Připojení konkrétního přihlášení k propojenému serveru pomocí různých přihlašovacích údajů uživatele

Následující příklad vytvoří mapování, aby se zajistilo, že se uživatel Domain\Mary Windows připojí k propojenému serveru Accounts pomocí přihlášení MaryP. Nahraďte <password> silným heslem.

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

Upozornění

Tento příklad nepoužívá ověřování systému Windows. Hesla se budou přenášet nešifrovaná. Hesla můžou být viditelná v definicích a skriptech zdrojů dat, které se ukládají na disk, v zálohách a v souborech protokolu. V tomto typu připojení nikdy nepoužívejte heslo správce. Pokyny pro zabezpečení specifické pro vaše prostředí najdete ve správci sítě.

C. Mapování konkrétního místního přihlášení ke vzdálenému přihlášení k serveru

V některých případech, jako je například azure SQL Managed Instance, ke spuštění úlohy agenta SQL, která provádí dotaz Transact-SQL (T-SQL) na vzdáleném serveru prostřednictvím propojeného serveru, musíte vytvořit mapování mezi přihlášením na místním serveru na přihlašovací jméno na vzdáleném serveru, který má oprávnění ke spuštění dotazu T-SQL. Když se úloha agenta SQL připojí ke vzdálenému serveru prostřednictvím propojeného serveru, spustí dotaz T-SQL v kontextu vzdáleného přihlášení, který musí mít potřebná oprávnění ke spuštění dotazu T-SQL.

Pokud mapujete přihlášení pro úlohu agenta SQL ve službě Azure SQL Managed Instance, místní přihlášení, které namapujete na vzdálené přihlášení, musí být vlastníkem úlohy agenta SQL, pokud není úloha agenta SQL správcem systému, v takovém případě byste měli namapovat všechna místní přihlášení. Další informace najdete v úlohách agenta SQL se službou Azure SQL Managed Instance.

Spuštěním následujícího ukázkového příkazu na místním serveru namapujte místní přihlášení local_login_name ke vzdálenému serveru login_name při připojování k propojenému serveru 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. Mapování všech místních přihlášení na vzdálené přihlášení k serveru

Nastavením na localloginmožnost NULL , můžete namapovat všechna místní přihlášení na přihlášení na vzdáleném serveru.

Při provádění úlohy agenta SQL spravované instance Azure SQL vlastněné správcem systému , který dotazuje vzdálený server prostřednictvím propojeného serveru, se vyžaduje mapování všech místních přihlášení na vzdálené přihlášení k vzdálenému serveru. Další informace najdete v úlohách agenta SQL se službou Azure SQL Managed Instance. Když se úloha agenta SQL připojí ke vzdálenému serveru prostřednictvím propojeného serveru, spustí dotaz T-SQL v kontextu vzdáleného přihlášení, který musí mít potřebná oprávnění ke spuštění dotazu T-SQL.

Spuštěním následujícího ukázkového příkazu na místním serveru namapujte všechna místní přihlášení ke vzdálenému serveru login_name při připojování k propojenému serveru remote_server:

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

E. Kontrola propojených přihlášení

Následující příklad ukazuje všechna přihlášení, která byla namapována pro propojený 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;