Udostępnij za pośrednictwem


wykonać AS (języka Transact-SQL)

Ustawia wykonanie kontekście sesja.

Domyślnie sesja rozpoczyna się, gdy użytkownik loguje się i kończy się, gdy użytkownik się wylogowuje.Wszystkie operacje podczas sesja podlegają kontroli uprawnień dla tego użytkownika.Gdy wykonać AS instrukcja jest uruchamiany, kontekst wykonywania sesja jest włączane określona nazwa użytkownika lub logowania.Po przełączniku kontekstu uprawnienia są porównywane z tokenów zabezpieczeń logowania i użytkownika dla tego konta zamiast osoby wywoływania wykonać AS instrukcja.W zasadzie konta użytkownika lub logowania są traktowane przez cały czas trwania sesja lub moduł wykonanie lub przełączanie kontekstu jawnie jest anulowane.Aby uzyskać więcej informacji na temat wykonywania kontekstu zobacz Understanding Execution Context. Aby uzyskać więcej informacji na temat przełączania kontekstu zobacz Understanding Context Switching.

Topic link iconKonwencje składni języka Transact-SQL

{ EXEC | EXECUTE ] AS <context_specification>
[;]

<context_specification>::=
{ LOGIN | USER } = 'name'
    [ WITH { NO REVERT | COOKIE INTO @varbinary_variable } ] 
| CALLER

Argumenty

  • IDENTYFIKATOR LOGOWANIA
    Określa kontekst wykonania do być uznawane jest nazwa logowania.Jest zakresem personifikację poziom serwera.

  • UŻYTKOWNIK
    Określa kontekst do się personifikowanych użytkowników w bieżącej bazie danych.Zakres personifikacji jest ograniczone do bieżącej bazy danych.przełączanie kontekstu użytkownika bazy danych nie dziedziczy uprawnień poziom serwera tego użytkownika.

    Important noteImportant Note:

    Podczas przełączanie kontekstu użytkownika bazy danych jest aktywny, wszelkie próby ponownego dostępu do zasobów poza z bazy danych spowoduje, że instrukcja nie powiedzie się.Obejmuje to USE database instrukcje, kwerendami rozproszonymi i kwerendy, które odwołują się do innej bazy danych, która używa part trzech lub czterech identyfikatorów. Aby rozszerzyć zakres przełączanie kontekstu poza bieżącą bazę danych, zobacz Extending Database Impersonation by Using EXECUTE AS.

  • 'name'
    Is a valid user or login name.name must be a member of the sysadmin fixed server role, or exist as a principal in sys.database_principals or sys.server_principals, respectively.

    name można określić jako zmiennej lokalnej.

    name musi być kontem pojedynczych i nie może być grupy, roli, certyfikat, klucz lub konto wbudowane, takie jak NT\Usługa, NT AUTHORITY\NetworkService lub AUTHORITY\LocalSystem NT.

    Aby uzyskać więcej informacji zobacz Określanie użytkownika lub nazwa logowania w dalszej części tego tematu.

  • NIE OPERACJI PRZYWRACANIA
    Określa, że przełączanie kontekstu nie można przywrócić do poprzedniego kontekstu.

    Aby uzyskać więcej informacji na temat powrót do poprzedniego kontekstu zobacz REVERT (języka Transact-SQL).

  • W pliku COOKIE **@**varbinary_variable
    Określa kontekst wykonania mogą można przywrócić tylko powrót do poprzedniego kontekstu jeżeli wywołujący instrukcja REVERT WITH plik COOKIE zawiera odpowiedniego **@**varbinary_variable wartość.The Database Engine passes the cookie to **@**varbinary_variable.

    **@**varbinary_variable jest varbinary(100).

  • OBIEKT WYWOŁUJĄCY
    Użyto wewnątrz modułu określa instrukcji wewnątrz modułu są wykonywane w kontekście wywołującego modułu.

    Instrukcja poza moduł ma żadna akcja.

Remarks

Zmiany w kontekście wykonanie pozostają w mocy, dopóki nie następuje jedno z następujących czynności:

  • Innej instrukcja wykonać AS jest uruchamiany.

  • instrukcja operacji PRZYWRACANIA jest uruchamiany.

  • Sesja zostanie usunięte.

Stos kontekstu wykonać można utworzyć przez wywołanie wykonać AS instrukcja wiele razy dla wielu wystawców.Po wywołaniu instrukcja operacji PRZYWRACANIA przełącza kontekst logowania lub użytkownikowi w następny poziom wyżej w stos kontekstu.Aby pokaz tego zachowania zobacz Przykład A.

Określanie użytkownika lub nazwa logowania

Nazwa użytkownika lub logowania, określonego w wykonać AS <context_specification> musi istnieć jako podmiotu w sys.database_principals or sys.server_principals odpowiednio lub wykonać AS instrukcja nie powiedzie się. Ponadto należy udzielić uprawnienia PERSONIFIKACJI spłaty kapitału.Jeżeli obiekt wywołujący jest właścicielem bazy danych lub nie jest element członkowski z sysadmin stała rola serwera, musi istnieć główny, nawet wtedy, gdy użytkownik uzyskuje dostęp do bazy danych lub wystąpienie SQL Server za pomocą grupy systemu Windows element członkowski wysyłki. Załóżmy na przykład, następujące warunki:

  • CompanyDomain\SQLUsers grupa ma dostęp do Sprzedaż bazy danych.

  • CompanyDomain\SqlUser1 jest członkiem SQLUsers i dlatego ma zawsze dostęp do Sprzedaż bazy danych.

Mimo że CompanyDomain\SqlUser1 ma dostęp do bazy danych poprzez członkostwo w SQLUsers Instrukcja grupie EXECUTE AS USER = 'CompanyDomain\SqlUser1' nie działa, ponieważ CompanyDomain\SqlUser1 nie istnieje jako głównego w bazie danych.

Jeśli użytkownik jest oddzielony (logowania skojarzone już nie istnieje), a użytkownik nie został utworzony z WITHOUT LOGIN, EXECUTE AS nie będzie działać dla użytkownika.

Najważniejsze wskazówki

Określ identyfikator logowania lub użytkownik, który ma co najmniej uprawnienia wymagane do wykonywania operacji w sesja.Na przykład nie określono nazwy logowania z uprawnieniami poziom serwera, jeśli tylko są uprawnienia poziom bazy danych; lub nie określono konta właściciela do bazy danych, chyba że te uprawnienia są wymagane.

Korzystanie z nie operacji PRZYWRACANIA

Gdy wykonać AS instrukcja zawiera z opcjonalnych, klauzula operacji PRZYWRACANIA nie kontekst wykonywania sesja nie można zresetować przy użyciu operacji PRZYWRACANIA lub wykonywania instrukcji wykonać AS innego.Kontekście zestaw w instrukcja pozostaje w wpływu do chwili, gdy sesja zostanie usunięte.

Gdy przy użyciu pliku COOKIE nie operacji PRZYWRACANIA = @varbinary\_variablKlauzula e jest określony, SQL Server Database Engine przekazuje wartość pliku cookie do @varbinary\_variable. Kontekst wykonywania ustala, że instrukcja tylko może można przywrócić do poprzedniego kontekstu, jeśli wywołujący REVERT przy użyciu pliku COOKIE = @varbinary\_variable Instrukcja zawiera takie same @varbinary\_variable wartość.

Ta opcja jest przydatna w środowisku, w które połączenie jest używane buforowanie.Buforowanie połączeń jest utrzymywanie grupy połączeń z bazą danych do ponownego użycia przez aplikacje na serwerze aplikacji.Ponieważ wartości są przekazywane do @varbinary\_variable znany jest tylko do rozmówcy wykonać AS instrukcja, obiekt wywołujący może zagwarantować że kontekst wykonywania ustanawiają one nie mogą być zmieniane przez inną osobę.

Określanie oryginalny identyfikator logowania

Użycie ORIGINAL_LOGIN funkcja zwracająca nazwę logowania, który podłączonych do tego wystąpienie SQL Server. Ta funkcja służy do zwracania tożsamości oryginalnego identyfikatora logowania w sesjach, w których występują wiele przełączeń kontekstu jawny lub niejawny bazy danych.

Uprawnienia

Aby określić wykonać AS na identyfikator logowania, obiekt wywołujący musi mieć uprawnienia PERSONIFIKACJI nazwy logowania określony.Aby określić wykonać jako na użytkownika bazy danych, proces wywołujący musi mieć uprawnienia PERSONIFIKACJI określonej nazwy użytkownika.Uprawnienia PERSONIFIKACJI WYWOŁUJĄCEGO AS wykonać jest określony, nie są wymagane.

Przykłady

A.Za pomocą AS wykonać i operacji PRZYWRACANIA, należy przełączyć kontekst

Poniższy przykład tworzy stos wykonanie kontekstu, za pomocą wielu wystawców.The REVERT instrukcja is then used to reset the execution context to the previous caller. The REVERT instrukcja is executed multiple times moving up the stack until the execution context is zestaw to the original caller.

USE AdventureWorks;
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

Poniższy przykład ustawia kontekst wykonywania sesja do określonego użytkownika i określa WITH NO REVERT COOKIE = @varbinary\_variablKlauzula e. The REVERT instrukcja must specify the value passed to the @cookie variable in the EXECUTE AS instrukcja to successfully revert the context back to the caller. Aby uruchomić ten przykład login1 Identyfikator logowania i user1 utworzone w przykładzie A użytkownik musi istnieć.

DECLARE @cookie varbinary(100);
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(100);
-- 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