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
Azure SQL Database
Felügyelt Azure SQL-példány
Azure Synapse Analytics
Beállítja egy munkamenet végrehajtási környezetét.
Alapértelmezés szerint a munkamenet akkor indul el, amikor egy felhasználó bejelentkezik, és a felhasználó kijelentkezésekor ér véget. A munkamenetek során minden művelet engedély-ellenőrzés tárgyát képezi a felhasználóval szemben. Ha egy EXECUTE AS utasítás fut, a munkamenet végrehajtási környezete a megadott bejelentkezésre vagy felhasználónévre vált. A környezeti váltás után a rendszer az engedélyeket az adott fiók bejelentkezési és felhasználói biztonsági jogkivonatai alapján ellenőrzi ahelyett, hogy a EXECUTE AS utasítást hívna meg. A felhasználói vagy bejelentkezési fiók lényegében a munkamenet vagy a modul végrehajtásának időtartamára van megszemélyesítve, vagy a környezeti kapcsoló explicit módon vissza lesz kapcsolva.
Transact-SQL szintaxis konvenciói
Szintaxis
{ EXEC | EXECUTE } AS <context_specification>
[;]
<context_specification>::=
{ LOGIN | USER } = 'name'
[ WITH { NO REVERT | COOKIE INTO @varbinary_variable } ]
| CALLER
Érvek
BEJELENTKEZÉS
Az: SQL Server 2008 (10.0.x) és újabb verziókra vonatkozik.
Megadja, hogy a megszemélyesítendő végrehajtási környezet egy bejelentkezés. A megszemélyesítés hatóköre a kiszolgáló szintjén van.
Jegyzet
Ez a lehetőség nem érhető el a tárolt adatbázisokban, az Azure SQL Database-ben vagy az Azure Synapse Analyticsben.
FELHASZNÁLÓ
Megadja, hogy a megszemélyesítendő környezet az aktuális adatbázis felhasználója-e. A megszemélyesítés hatóköre az aktuális adatbázisra korlátozódik. Az adatbázis-felhasználóra való környezeti váltás nem örökli a felhasználó kiszolgálószintű engedélyeit.
Fontos
Bár a környezet az adatbázis-felhasználóra való váltás aktív, az adatbázison kívüli erőforrások elérésére tett kísérletek az utasítás sikertelenségéhez vezetnek. Ide tartoznak a USE adatbázis- utasítások, elosztott lekérdezések és olyan lekérdezések, amelyek egy másik, három- vagy négyrészes azonosítót használó adatbázisra hivatkoznak.
'név' Érvényes felhasználó- vagy bejelentkezési név. név a sysadmin rögzített kiszolgálói szerepkör tagjának kell lennie, vagy a sys.database_principals vagy sys.server_principalstagként kell lennie.
név megadható helyi változóként.
név egyetlen fióknak kell lennie, és nem lehet csoport, szerepkör, tanúsítvány, kulcs vagy beépített fiók, például NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService vagy NT AUTHORITY\LocalSystem.
További információ: Felhasználó vagy bejelentkezési név megadása a jelen témakör későbbi részében.
NINCS VISSZAÁLLÍTÁS
Megadja, hogy a környezeti kapcsoló nem állítható vissza az előző környezetbe. A NO REVERT beállítás csak az adhoc szintjén használható.
Az előző környezetre való visszaállításról további információt a REVERT (Transact-SQL)című cikkben talál.
COOKIE INTO @varbinary_variable
Azt adja meg, hogy a végrehajtási környezet csak akkor állítható vissza az előző környezetbe, ha a hívó REVERT WITH COOKIE utasítás a megfelelő @varbinary_variable értéket tartalmazza. Az adatbázismotor átadja a cookie-t @varbinary_variable. A COOKIE INTO beállítás csak adhoc szinten használható.
@varbinary_variablevarbinary(8000).
Jegyzet
A cookie OUTPUT paraméter jelenleg varbinary(8000), amely a megfelelő maximális hossz. A jelenlegi implementáció azonban varbinary(100)ad vissza. Az alkalmazásoknak varbinary(8000) kell fenntartaniuk, hogy az alkalmazás továbbra is megfelelően működjön, ha a cookie visszatérési mérete egy későbbi kiadásban megnő.
HÍVÓ
Ha egy modulban használják, a modulon belüli utasításokat a modul hívójának kontextusában hajtja végre.
Ha egy modulon kívül használják, az utasításnak nincs művelete.
Jegyzet
Ez a lehetőség nem érhető el az Azure Synapse Analyticsben.
Megjegyzések
A végrehajtási környezet módosítása mindaddig érvényben marad, amíg az alábbiak valamelyike nem következik be:
Egy másik EXECUTE AS utasítás fut.
A rendszer egy REVERT utasítást futtat.
A munkamenet el lesz ejtve.
A tárolt eljárás vagy eseményindító, ahol a parancsot végrehajtották, kilép.
Végrehajtási környezet vermét úgy hozhat létre, hogy többször meghívja az EXECUTE AS utasítást több tagra. Hívás esetén a REVERT utasítás a környezetet a következő szint bejelentkezési vagy felhasználói állapotára váltja a környezeti veremben. Ennek a viselkedésnek a bemutatásához lásd A példa.
Felhasználó vagy bejelentkezési név megadása
Az EXECUTE AS <context_specification> alkalmazásban megadott felhasználónévnek vagy bejelentkezési névnek egyszerű felhasználóként kell lennie sys.database_principals vagy sys.server_principals, vagy az EXECUTE AS utasítás meghiúsul. Emellett a megszemélyesítési engedélyeket meg kell adni a megbízónak. Hacsak a hívó nem az adatbázis tulajdonosa, vagy a sysadmin rögzített kiszolgálói szerepkör tagja, akkor is léteznie kell, ha a felhasználó Windows-csoporttagságon keresztül fér hozzá az SQL Server adatbázisához vagy példányához. Tegyük fel például, hogy a következő feltételek teljesülnek:
CompanyDomain\SQLUsers csoport hozzáfér a Sales adatbázishoz.
CompanyDomain\SqlUser1SQLUsers tagja, ezért implicit hozzáféréssel rendelkezik a Sales adatbázishoz.
Bár CompanyDomain\SqlUser1 a SQLUsers csoport tagságán keresztül fér hozzá az adatbázishoz, a EXECUTE AS USER = 'CompanyDomain\SqlUser1' utasítás meghiúsul, mert CompanyDomain\SqlUser1 nem létezik egyszerűként az adatbázisban.
Ha a felhasználó árva (a társított bejelentkezés már nem létezik), és a felhasználó nem lett létrehozva BEJELENTKEZÉS NÉLKÜL, EXECUTE AS sikertelen lesz a felhasználó számára.
Ajánlott eljárás
Adjon meg egy olyan bejelentkezést vagy felhasználót, amely a munkamenet műveleteinek végrehajtásához szükséges legkisebb jogosultságokkal rendelkezik. Például ne adjon meg kiszolgálószintű engedélyekkel rendelkező bejelentkezési nevet, ha csak adatbázisszintű engedélyekre van szükség; vagy ne adjon meg adatbázis-tulajdonosi fiókot, kivéve, ha ezekre az engedélyekre van szükség.
Figyelmeztet
Az EXECUTE AS utasítás mindaddig sikeres lehet, amíg az adatbázismotor meg tudja oldani a nevet. Ha létezik tartományfelhasználó, előfordulhat, hogy a Windows képes feloldani a felhasználót az adatbázismotorhoz, annak ellenére, hogy a Windows-felhasználónak nincs hozzáférése az SQL Serverhez. Ez olyan feltételhez vezethet, amelyben úgy tűnik, hogy egy SQL Server-hozzáféréssel nem rendelkező bejelentkezés be van jelentkezve, bár a megszemélyesített bejelentkezés csak a nyilvános vagy a vendég számára biztosított engedélyekkel rendelkezik.
A WITH NOVERT használata
Ha az EXECUTE AS utasítás tartalmazza az opcionális WITH NO REVERT záradékot, a munkamenet végrehajtási környezete nem állítható vissza a REVERT használatával vagy egy másik EXECUTE AS utasítás végrehajtásával. Az utasítás által beállított környezet a munkamenet elvetéséig érvényben marad.
Ha a WITH NO REVERT COOKIE = @varbinary_variable záradék meg van adva, az SQL Server adatbázismotorja átadja a cookie-értéket @varbinary_variable. Az utasítás által beállított végrehajtási környezet csak akkor állítható vissza az előző környezetbe, ha a HÍVÁSI VISSZAÁLLÍTÁS COOKIE-VAL = @varbinary_variable utasítás ugyanazt a @varbinary_variable értéket tartalmazza.
Ez a beállítás olyan környezetben hasznos, amelyben kapcsolatkészletezést használ. A kapcsolatkészletezés az adatbázis-kapcsolatok egy csoportjának karbantartása az alkalmazáskiszolgálón lévő alkalmazások általi újrafelhasználáshoz. Mivel a @varbinary_variable átadott érték csak az EXECUTE AS utasítás hívójának ismert, a hívó garantálhatja, hogy az általuk létrehozott végrehajtási környezetet senki más nem módosíthatja.
Az eredeti bejelentkezés meghatározása
A ORIGINAL_LOGIN függvénnyel adja vissza az SQL Server-példányhoz csatlakoztatott bejelentkezés nevét. Ezzel a függvénnyel visszaadhatja az eredeti bejelentkezés identitását olyan munkamenetekben, amelyekben számos explicit vagy implicit környezeti kapcsoló található.
Engedélyek
Ha meg szeretné adni, hogy EXECUTE AS bejelentkezéskor, a hívónak IMPERSONATE engedéllyel kell rendelkeznie a megadott bejelentkezési névre, és nem tagadhatja meg a MEGSZEMÉLYESÍTÉSi jogosultságot. Ha meg szeretné adni EXECUTE AS adatbázis-felhasználón, a hívónak IMPERSONATE engedélyekkel kell rendelkeznie a megadott felhasználónévhez. Ha EXECUTE AS CALLER van megadva, IMPERSONATE engedélyek nem szükségesek.
Példák
Egy. Az EXECUTE AS és a REVERT használata a környezetváltáshoz
Az alábbi példa egy több tagot használó környezet-végrehajtási vermet hoz létre. A REVERT utasítással visszaállíthatja a végrehajtási környezetet az előző hívóra. A REVERT utasítás többször lesz végrehajtva, amíg a végrehajtási környezet nem lesz az eredeti hívóra állítva.
USE AdventureWorks2022;
GO
--Create two temporary principals
CREATE LOGIN login1 WITH PASSWORD = 'J345#$)thb';
CREATE LOGIN login2 WITH PASSWORD = 'Uor80$23b';
GO
CREATE USER user1 FOR LOGIN login1;
CREATE USER user2 FOR LOGIN login2;
GO
--Give IMPERSONATE permissions on user2 to user1
--so that user1 can successfully set the execution context to user2.
GRANT IMPERSONATE ON USER:: user2 TO user1;
GO
--Display current execution context.
SELECT SUSER_NAME(), USER_NAME();
-- Set the execution context to login1.
EXECUTE AS LOGIN = 'login1';
--Verify the execution context is now login1.
SELECT SUSER_NAME(), USER_NAME();
--Login1 sets the execution context to login2.
EXECUTE AS USER = 'user2';
--Display current execution context.
SELECT SUSER_NAME(), USER_NAME();
-- The execution context stack now has three principals: the originating caller, login1 and login2.
--The following REVERT statements will reset the execution context to the previous context.
REVERT;
--Display current execution context.
SELECT SUSER_NAME(), USER_NAME();
REVERT;
--Display current execution context.
SELECT SUSER_NAME(), USER_NAME();
--Remove temporary principals.
DROP LOGIN login1;
DROP LOGIN login2;
DROP USER user1;
DROP USER user2;
GO
B. A WITH COOKIE záradék használata
Az alábbi példa egy munkamenet végrehajtási környezetét egy adott felhasználóra állítja, és megadja a WITH COOKIE INTO @varbinary_variable záradékot. A REVERT utasításnak meg kell adnia a @cookie változónak átadott értéket a EXECUTE AS utasításban, hogy sikeresen visszaállítsa a környezetet a hívónak. A példa futtatásához léteznie kell az A példában létrehozott login1 bejelentkezésnek és user1 felhasználónak.
DECLARE @cookie VARBINARY(8000);
EXECUTE AS USER = 'user1' WITH COOKIE INTO @cookie;
-- Store the cookie in a safe location in your application.
-- Verify the context switch.
SELECT SUSER_NAME(), USER_NAME();
--Display the cookie value.
SELECT @cookie;
GO
-- Use the cookie in the REVERT statement.
DECLARE @cookie VARBINARY(8000);
-- Set the cookie value to the one from the SELECT @cookie statement.
SET @cookie = <value from the SELECT @cookie statement>;
REVERT WITH COOKIE = @cookie;
-- Verify the context switch reverted.
SELECT SUSER_NAME(), USER_NAME();
GO