Udostępnij za pośrednictwem


WYKONANIE jako języka Transact-SQL)

Ustawia kontekst wykonywania 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ń wobec tego użytkownika.Gdy jako wykonywanie instrukcja , kontekst wykonywania sesja jest włączane do określonej nazwy logowania lub użytkownika.Po przełączanie kontekstu, uprawnienia są porównywane z tokenów zabezpieczeń logowania i użytkownika dla tego konta zamiast osoby wywołanie jako wykonywanie instrukcja.W zasadzie logowania konta użytkownika lub jest traktowane na czas trwania sesja lub moduł wykonanie lub jawnie przywróconymi przełączanie kontekstu .Aby uzyskać więcej informacji na temat Kontekst wykonywania, zobacz Opis kontekstu wykonania.Aby uzyskać więcej informacji na temat przełączania kontekstu, zobacz Opis przełączania kontekstu.

Ikona łącza do tematuJęzyka Transact-SQL składni konwencje

Składnia

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

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

Argumenty

  • IDENTYFIKATOR LOGOWANIA
    Określa, że można przeprowadzić personifikacji kontekst wykonania jest identyfikator logowania.zakres personifikacji jest na poziomserwera.

  • UŻYTKOWNIK
    Określa, że kontekst można przeprowadzić personifikacji użytkownika w bieżącej bazie danych.zakres personifikacji jest ograniczony do bieżącej bazy danych.przełączanie kontekstu użytkownika bazy danych nie dziedziczą uprawnieniapoziom serwera - tego użytkownika.

    Ważna informacjaWażne:

    Gdy przełączanie kontekstu użytkownika bazy danych jest aktywny, próba dostępu do zasobów znajdujących się poza bazą danych spowoduje, że instrukcja nie powiedzie się.Obejmuje to wykorzystanie database instrukcje, kwerendami rozproszonymi i kwerend, które odwołać innej bazy danych, która używa trzech lub czterech niepełnym identyfikatorów.Aby rozszerzyć zakres przełączanie kontekstu poza bieżącej bazy danych, zobacz Rozszerzanie bazy danych personifikacji przy użyciu jako EXECUTE.

  • 'name'
    Jest prawidłową nazwą użytkownika lub logowania.nameelement członkowski sysadminstała rola serweralub istnieje jako główny zobowiązany w sys.database_principals lub sys.server_principals, odpowiednio.

    namemożna określić jako zmiennej lokalnej.

    namemusi być kontem singleton i nie może być grupy, roli, certyfikat, kluczlub wbudowane konto, takie jak NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService lub NT AUTHORITY\LocalSystem.

    Aby uzyskać więcej informacji, zobacz określające nazwę logowania użytkownika lub dalej w tym temacie.

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

    Aby uzyskać więcej informacji na temat powracanie do poprzedniego kontekstu, zobacz PRZYWRÓĆ (Transact-SQL).

  • PLIK COOKIE DO@varbinary_variable
    Określa kontekst wykonania mogą przywróconymi do poprzedniego kontekstu tylko jeżeli wywołujący PRZYWRÓCENIE Z pliku COOKIE instrukcja zawiera poprawne @varbinary_variable wartości.Aparat baz danych Przekazuje plik cookie do @varbinary_variable.

    @varbinary_variableis varbinary(100).

  • OBIEKT WYWOŁUJĄCY
    Gdy używany wewnątrz modułu, określa, że instrukcje wewnątrz modułu są wykonywane w kontekście wywołującego modułu.

    instrukcja poza module ma żadnej akcja.

Uwagi

Zmiana w kontekście wykonywania pozostaje, dopóki występuje jeden z następujących czynności:

  • Innej jako wykonywanie instrukcja jest uruchamiane.

  • PRZYWRÓĆ instrukcja jest uruchamiane.

  • sesja jest odrzucany.

Stos kontekstu wykonanie można utworzyć poprzez wywołanie się wykonywanie instrukcja wiele razy w wielu podmiotów.Po wywołaniu PRZYWRÓĆ instrukcja przełącza kontekst logowania lub użytkownikowi w następny poziom w górę stosu kontekstu.Aby wykazanie tego zachowania, zobacz przykład a.

Określając nazwę logowania użytkownika lub

Nazwa użytkownika lub logowania określony w wykonywanie jako <context_specification> musi istnieć jako główny zobowiązany w sys.database_principals lub sys.server_principals, odpowiednio, lub EXECUTE jako instrukcja nie powiedzie się.Ponadto należy udzielić uprawnienia PERSONIFIKUJ kapitału.Chyba że obiekt wywołujący jest właścicielem bazy danych lub element członkowski sysadmin stała rola serweragłównego zobowiązanego musi istnieć nawet wtedy, gdy użytkownik uzyskuje dostęp do bazy danych lub wystąpienie SQL Server systemu Windows za pomocą grup członkostwa.Załóżmy na przykład, następujące warunki:

  • CompanyDomain\SQLUsersgrupa ma dostęp do Sales bazy danych.

  • CompanyDomain\SqlUser1element członkowski SQLUsers i dlatego ma zawsze dostęp do Sales bazy danych.

Chociaż CompanyDomain\SqlUser1 ma dostęp do bazy danych dzięki członkostwu w SQLUsers grupy, instrukcja EXECUTE AS USER = 'CompanyDomain\SqlUser1' nie działa, ponieważ CompanyDomain\SqlUser1 nie istnieje jako główny zobowiązany w bazie danych.

Jeśli użytkownik jest oddzielony (logowania skojarzone już nie istnieje) i użytkownik nie został utworzony z bez logowania, jak wykonywanie zakończy się niepowodzeniem dla użytkownika.

W trosce o

Określ identyfikator logowania lub użytkownika, który ma co najmniej uprawnienia wymagane do wykonywania operacji w sesja.Na przykład nie określono nazwy logowania na serwerze -poziom uprawnień, jeśli tylko uprawnieniapoziom bazy danych — są wymagane; lub nie określono konta właściciela bazy danych, chyba że te uprawnienia są wymagane.

NIE operacji PRZYWRACANIA przy użyciu

Podczas wykonywania instrukcja zawiera opcjonalny bez przywrócenia klauzula, kontekst wykonywania sesja nie można resetować przy użyciu operacji PRZYWRACANIA lub wykonywania innego jako wykonywanie instrukcja.w kontekście zestaw instrukcja pozostaje wpływu, dopóki przerwaniu sesja .

Gdy z nr PRZYWRÓCIĆ COOKIE = @varbinary_variable klauzula jest określony, Aparat baz danych programu SQL Server przekazuje wartość cookie, aby @varbinary_variable.Wykonanie w kontekście zestaw przez instrukcja można tylko można przywrócić do poprzedniego kontekstu Jeśli wywołujący PRZYWRÓCENIE Z pliku COOKIE = @varbinary_variable instrukcja zawiera takie same @varbinary_variable wartości.

Ta opcja jest przydatna w środowisku, w które połączenie jest używane buforowanie.Tworzenie puli połączeń jest utrzymanie grupy połączeń bazy danych do ponownego użycia przez aplikacje na serwerze aplikacji.Ponieważ wartości przekazywane do @varbinary_variable jest znany tylko wywołującego jako wykonywanie instrukcja, obiekt wywołujący może zagwarantować że ustanawiają one kontekst wykonania nie można zmienić przez inną osobę.

Określanie oryginalnego identyfikatora logowania

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

Uprawnienia

Aby określić jako wykonywanie na identyfikator logowania, wywołujący uprawnienia PERSONIFIKUJ określonej nazwie.Aby określić jako wykonywanie na użytkownika bazy danych, obiekt wywołujący uprawnienia PERSONIFIKUJ określona nazwa użytkownika.Po określeniu wykonanie WYWOŁUJĄCEGO jako uprawnienia PERSONIFIKUJ nie są wymagane.

Przykłady

A.JAK wykonać przy użyciu i PRZYWRACANIA, należy przełączyć kontekst

Poniższy przykład tworzy stos wykonanie kontekstu przy użyciu wielu podmiotów.REVERTinstrukcja jest następnie używana do resetowania kontekst wykonywania poprzednich wywołującemu. REVERTinstrukcja jest wykonywane wielokrotnie przenoszenie stosu, aż kontekst wykonania jest zestaw na oryginalny obiekt wywołujący.

USE AdventureWorks2008R2;
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 PRZYWRÓCENIE Z pliku COOKIE = @varbinary_variable klauzula.REVERTinstrukcja należy określić wartość przekazywana do @cookie w zmiennej EXECUTE ASinstrukcja pomyślnie przywrócić kontekst do rozmówcy. Aby uruchomić ten przykład, login1 logowania i user1 użytkownika utworzone w przykładzie a 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