Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Létrehoz vagy frissít egy leképezést az SQL Server helyi példányán lévő bejelentkezés és egy távoli kiszolgálón lévő biztonsági fiók között.
Transact-SQL szintaxis konvenciók
Szemantika
sp_addlinkedsrvlogin
[ @rmtsrvname = ] N'rmtsrvname'
[ , [ @useself = ] 'useself' ]
[ , [ @locallogin = ] N'locallogin' ]
[ , [ @rmtuser = ] N'rmtuser' ]
[ , [ @rmtpassword = ] N'rmtpassword' ]
[ ; ]
Érvek
[ @rmtsrvname = ] N'rmtsrvname'
Egy csatolt kiszolgáló neve, amelyre a bejelentkezési leképezés vonatkozik. @rmtsrvnamea sysname, alapértelmezés nélkül.
[ @useself = ] 'használd önmagát'
Meghatározza, hogy az rmtsrvname-hez helyi bejelentkezések megszemélyesítésével vagy egy bejelentkezés és jelszó explicit elküldésével csatlakozik-e.
@useselfa varchar(8), alapértelmezés szerint true.
- Egy érték
trueazt határozza meg, hogy a bejelentkezések saját hitelesítő adataikkal csatlakozzanak @rmtsrvname, és figyelmen kívül hagyják a @rmtuser és @rmtpassword argumentumokat. -
falseazt határozza meg, hogy a @rmtuser és @rmtpassword argumentumok a megadott @locallogin @rmtsrvname való csatlakozásra szolgálnak.
Ha @rmtuser és @rmtpassword van beállítva NULL, a rendszer nem használ bejelentkezést vagy jelszót a csatolt kiszolgálóhoz való csatlakozáshoz.
[ @locallogin = ] N'locallogin'
Bejelentkezés a helyi kiszolgálón.
@locallogina sysname, alapértelmezés szerint NULLa .
NULL meghatározza, hogy ez a bejegyzés minden olyan helyi bejelentkezésre vonatkozik, amely @rmtsrvname csatlakozik. Ha nem NULL, @locallogin lehet SQL Server-bejelentkezés vagy Windows-fiók. A Windows-fióknak közvetlenül vagy egy Windows-csoport tagságán keresztül kell hozzáférnie az SQL Serverhez.
[ @rmtuser = ] N'rmtuser'
Az @rmtsrvname való csatlakozáshoz használt távoli bejelentkezés, ha @useself igen false.
@rmtusera sysname, alapértelmezés szerint NULLa . Ha a távoli kiszolgáló olyan SQL Server-példány, amely nem használja a Windows-hitelesítést, @rmtuser egy SQL Server-bejelentkezés.
[ @rmtpassword = ] N'rmtpassword'
A @rmtuser társított jelszó.
@rmtpassworda sysname, alapértelmezés szerint NULLa .
Kódértékek visszaadása
0 (sikeres) vagy 1 (hiba).
Megjegyzések
Amikor egy felhasználó bejelentkezik a helyi kiszolgálóra, és egy elosztott lekérdezést hajt végre, amely hozzáfér a csatolt kiszolgálón lévő táblához, a helyi kiszolgálónak be kell jelentkeznie a csatolt kiszolgálóra a felhasználó nevében a tábla eléréséhez. A helyi kiszolgáló által a csatolt kiszolgálóra való bejelentkezéshez használt hitelesítő adatok megadására szolgál sp_addlinkedsrvlogin .
Megjegyzés:
Ha a legjobb lekérdezési terveket szeretné létrehozni, amikor táblát használ egy csatolt kiszolgálón, a lekérdezésfeldolgozónak rendelkeznie kell a csatolt kiszolgáló adatterjesztési statisztikáival. Előfordulhat, hogy a tábla bármely oszlopára korlátozott engedélyekkel rendelkező felhasználók nem rendelkeznek elegendő engedélyekkel az összes hasznos statisztika beszerzéséhez, és kevésbé hatékony lekérdezési tervet kapnak, és gyenge teljesítményt tapasztalnak. Ha a csatolt kiszolgáló az SQL Server egy példánya, az összes elérhető statisztika beszerzéséhez a felhasználónak a táblát kell birtokolnia, vagy tagja kell lennie a sysadmin rögzített kiszolgálói szerepkörnek, a db_owner rögzített adatbázis-szerepkörnek vagy a csatolt kiszolgálón db_ddladmin rögzített adatbázis-szerepkörnek. Az SQL Server 2012 SP1 (11.0.3x) módosítja a statisztikák beszerzésére vonatkozó engedélykorlátozásokat, és lehetővé teszi a SELECT engedéllyel rendelkező felhasználók számára a DBCC SHOW_STATISTICS keresztül elérhető statisztikák elérését. További információt a DBCC SHOW_STATISTICS Engedélyek szakaszában talál.
A rendszer automatikusan létrehozza a helyi kiszolgálón lévő összes bejelentkezés és a csatolt kiszolgálón lévő távoli bejelentkezések közötti alapértelmezett leképezést a végrehajtással sp_addlinkedserver. Az alapértelmezett leképezés azt jelzi, hogy az SQL Server a helyi bejelentkezés felhasználói hitelesítő adatait használja, amikor a bejelentkezés nevében csatlakozik a csatolt kiszolgálóhoz. Ez egyenértékű a csatolt kiszolgálóhoz sp_addlinkedsrvlogin beállított végrehajtással @useselftrue, helyi felhasználónév megadása nélkül. Csak az alapértelmezett leképezés módosítására vagy adott helyi bejelentkezések új leképezéseinek hozzáadására használható sp_addlinkedsrvlogin . Az alapértelmezett leképezés vagy bármely más leképezés törléséhez használja a következőt sp_droplinkedsrvlogin: .
Ahelyett, hogy sp_addlinkedsrvlogin előre meghatározott bejelentkezési megfeleltetést kellene létrehoznia, az SQL Server automatikusan használhatja a lekérdezést kibocsátó felhasználó Windows biztonsági hitelesítő adatait (Windows bejelentkezési nevét és jelszavát) a csatolt kiszolgálóhoz való csatlakozáshoz, ha az alábbi feltételek teljesülnek:
A felhasználó windowsos hitelesítési móddal csatlakozik az SQL Serverhez.
A biztonsági fiók delegálása elérhető az ügyfélen és a küldő kiszolgálón.
A szolgáltató támogatja a Windows-hitelesítési módot; például Windows rendszeren futó SQL Server.
Megjegyzés:
A delegálást nem kell engedélyezni az egy ugrásos forgatókönyvekhez, de több ugrásos forgatókönyvekhez szükséges.
Miután a csatolt kiszolgáló végrehajtotta a hitelesítést az SQL Server helyi példányán történő végrehajtással sp_addlinkedsrvlogin meghatározott leképezések használatával, a távoli adatbázis egyes objektumainak engedélyeit nem a helyi kiszolgáló, hanem a csatolt kiszolgáló határozza meg.
sp_addlinkedsrvlogin felhasználó által megadott tranzakción belül nem hajtható végre.
Engedélyek
A kiszolgálón bármilyen bejelentkezési engedély módosítása szükséges.
Példák
Egy. Az összes helyi bejelentkezés csatlakoztatása a csatolt kiszolgálóhoz saját felhasználói hitelesítő adataik használatával
Az alábbi példa létrehoz egy leképezést, amely biztosítja, hogy a helyi kiszolgálóra történő bejelentkezések a saját felhasználói hitelesítő adataik használatával csatlakozzanak a csatolt kiszolgálóhoz Accounts .
EXECUTE sp_addlinkedsrvlogin 'Accounts';
Vagy
EXECUTE sp_addlinkedsrvlogin 'Accounts', 'true';
Megjegyzés:
Ha az egyes bejelentkezésekhez explicit leképezések vannak létrehozva, azok elsőbbséget élveznek az adott társított kiszolgálóhoz esetleg létező globális leképezésekkel szemben.
B. Adott bejelentkezés csatlakoztatása a csatolt kiszolgálóhoz különböző felhasználói hitelesítő adatok használatával
Az alábbi példa létrehoz egy leképezést, amely biztosítja, hogy a Windows-felhasználó Domain\Mary a bejelentkezéssel Accountscsatlakozzon a csatolt kiszolgálóhozMaryP. Cserélje le <password> erős jelszóra.
EXECUTE sp_addlinkedsrvlogin 'Accounts', 'false', 'Domain\Mary', 'MaryP', '<password>';
Figyelmeztetés
Ez a példa nem windowsos hitelesítést használ. A jelszavak titkosítás nélkül lesznek továbbítva. A jelszavak megjelenhetnek az adatforrás-definíciókban és a lemezre mentett szkriptekben, a biztonsági másolatokban és a naplófájlokban. Ilyen kapcsolat esetén soha ne használjon rendszergazdai jelszót. A környezettel kapcsolatos biztonsági útmutatásért forduljon a hálózati rendszergazdához.
C. Adott helyi bejelentkezés leképezése távoli kiszolgálói bejelentkezésre
Bizonyos esetekben, például a felügyelt Azure SQL-példány esetében, egy olyan SQL Agent-feladat futtatásához, amely egy csatolt kiszolgálón keresztül hajt végre egy Transact-SQL (T-SQL) lekérdezést egy távoli kiszolgálón, létre kell hoznia egy megfeleltetést a helyi kiszolgálón található bejelentkezés és a távoli kiszolgálón való bejelentkezés között, amely rendelkezik a T-SQL-lekérdezés végrehajtására engedéllyel. Amikor az SQL Agent-feladat a csatolt kiszolgálón keresztül csatlakozik a távoli kiszolgálóhoz, végrehajtja a T-SQL-lekérdezést a távoli bejelentkezés kontextusában, amelynek rendelkeznie kell a T-SQL-lekérdezés végrehajtásához szükséges engedélyekkel.
Ha egy felügyelt Azure SQL-példányban lévő SQL Agent-feladathoz tartozó bejelentkezéseket képez le, a távoli bejelentkezéshez leképezett helyi bejelentkezésnek az SQL Agent-feladat tulajdonosának kell lennie, kivéve, ha az SQL Agent-feladat sysadmin, ebben az esetben le kell képeznie az összes helyi bejelentkezést. További információkért tekintse át az SQL Agent-feladatokat az Azure SQL Managed Instance használatával.
Futtassa a következő mintaparancsot a helyi kiszolgálón a helyi bejelentkezés local_login_name távoli kiszolgálói bejelentkezéshez login_name való leképezéséhez, amikor a csatolt kiszolgálóhoz remote_servercsatlakozik:
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. Az összes helyi bejelentkezés leképezése távoli kiszolgálói bejelentkezésre
A beállítással localloginNULLaz összes helyi bejelentkezést leképezheti egy bejelentkezésre a távoli kiszolgálón.
Az összes helyi bejelentkezés távoli kiszolgálói bejelentkezésre való leképezése szükséges a sysadmin tulajdonában lévő Azure SQL Managed Instance SQL Agent-feladat végrehajtásakor, amely egy távoli kiszolgálót egy csatolt kiszolgálón keresztül kér le. További információkért tekintse át az SQL Agent-feladatokat az Azure SQL Managed Instance használatával. Amikor az SQL Agent-feladat a csatolt kiszolgálón keresztül csatlakozik a távoli kiszolgálóhoz, végrehajtja a T-SQL-lekérdezést a távoli bejelentkezés kontextusában, amelynek rendelkeznie kell a T-SQL-lekérdezés végrehajtásához szükséges engedélyekkel.
Futtassa a következő mintaparancsot a helyi kiszolgálón az összes helyi bejelentkezés távoli kiszolgálói bejelentkezéshez login_name való leképezéséhez, amikor a csatolt kiszolgálóhoz remote_servercsatlakozik:
EXECUTE master.dbo.sp_addlinkedsrvlogin
@rmtsrvname = N'<remote_server>',
@useself = N'False',
@locallogin = NULL,
@rmtuser = N'<login_name>',
@rmtpassword = '<login_password>';
E. Csatolt bejelentkezések ellenőrzése
Az alábbi példa a csatolt kiszolgálóhoz hozzárendelt összes bejelentkezést mutatja be:
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;