Understanding Context Switching

Kontekst wykonania jest określony przez użytkownika lub podłączonego do sesja logowania lub wykonywania (wywołanie) modułu.Ustala ona tożsamości przed uprawnienia do wykonywania instrukcji lub wykonywania akcji są sprawdzane.W SQL Server, kontekst wykonywania mogą być przełączane do innego użytkownika lub logowania, wykonując wykonać AS instrukcja lub określanie wykonać AS klauzula w module. Po przełączniku kontekstu SQL Server sprawdza, czy uprawnienia logowania i użytkownika dla tego konta zamiast osoby wywoływania wykonać AS instrukcja lub moduł. Użytkownik bazy danych lub konto logowania do programu SQL Server jest uznawane za pozostały wykonanie sesja lub moduł, albo do przełączanie kontekstu jest jawnie przywrócone.Aby uzyskać więcej informacji na temat wykonywania kontekstu zobacz Understanding Execution Context.

Jawne przełączania kontekstu

Kontekst wykonywania sesja lub moduł można jednoznacznie zmieniony przez podanie nazwy użytkownika lub logowania w wykonać AS instrukcja.Personifikację pozostają w mocy, dopóki nie następuje jedno z następujących zdarzeń:

  • Sesja zostanie usunięte.

  • Kontekst jest przełączony na inny identyfikator logowania lub innego użytkownika.

  • Kontekst jest przywrócone do poprzedniego kontekstu wykonania.

Za pomocą wykonać AS jawnie podszycia się pod innego użytkownika jest podobny do SETUSER we wcześniejszych wersjach SQL Server. Aby uzyskać więcej informacji zobaczEXECUTE AS vs. SETUSER.

Jawne przełączania kontekstu poziom serwera

Aby przełączyć kontekst wykonywania poziom serwera, należy użyć logowania AS wykonać = "login_name"instrukcja. Nazwa użytkownika musi być widoczny jako podmiotu w sys.server_principals, a obiekt wywołujący instrukcja musi mieć uprawnienie do PERSONIFIKACJI nazwy logowania określony.

Zakres personifikacji, gdy kontekst wykonania jest poziom serwera, jest następująca:

  • Tokenem logowania login_name jest uwierzytelniany przez wystąpienie SQL Server i jest prawidłowy dla tego wystąpienia.

  • Uprawnienia poziom serwera i członkostw roli login_name są honorowane.

Użycie PRZYWRACANIE instrukcja, aby powrócić do poprzedniego kontekstu.Wywołujący instrukcja operacji PRZYWRACANIA musi być w tej samej bazy danych, w którym wystąpiło personifikację.

Przykład

W poniższym przykładzie chce utworzyć Peter Connelly, administrator sieci dla firmy Adventure Works cyklu, SQL Server konto logowania dla nowego pracownika Jinghao Liuhas. Peterowi firmy SQL Server Logowanie nie ma uprawnień poziomie serwera, wymagane do utworzenia SQL Server identyfikatory logowania, ale ma uprawnienie do PERSONIFIKACJI adventure-works\dan1, SQL Server Identyfikator logowania, który ma wymaganych uprawnień poziom serwera. Kiedy Peter łączy się z SQL Server, kontekstu wykonania dla sesja jest określany na podstawie jego SQL Server Zaloguj się. Aby utworzyć SQL Server Identyfikator logowania, Peter tymczasowo zakłada wykonanie kontekście adventure-works\dan1. Następnie tworzy on logowania.Na koniec on zwalnia jego założonej uprawnienia.

-- Switch execution context to the adventure-works\dan1 login account.
EXECUTE AS LOGIN = 'adventure-works\dan1';
-- Create the new login account.
CREATE LOGIN Jinghao1 WITH PASSWORD = '3KHJ6dhx(0xVYsdf';
-- Revert to the previous execution context.
REVERT;

Jawne przełączania kontekstu poziom bazy danych

Należy przełączyć kontekst poziom bazy danych, należy użyć przez użytkownika jako wykonać = "user_name"instrukcja. Nazwa użytkownika musi istnieć jako podmiotu w sys.database_principals i instrukcja obiekt wywołujący musi mieć uprawnienia PERSONIFIKACJI określonej nazwy użytkownika.

Zakres personifikacji, gdy kontekst wykonania jest poziom bazy danych jest w następujący sposób:

  • Tokenem użytkownika user_name jest uwierzytelniany przez wystąpienie SQL Server i jest prawidłowy w bieżącej bazie danych. Aby uzyskać informacje na temat rozszerzania personifikacji użytkownika poza zakresem bieżącej bazy danych zobacz Extending Database Impersonation by Using EXECUTE AS.

  • Uprawnienia poziom bazy danych i członkostw roli user_name w bieżącej bazie danych są honorowane. Nie są honorowane udzielone jawnie tożsamości w tokenie użytkownika lub członkostwa roli za pomocą uprawnień poziom serwera.

Użycie PRZYWRACANIE instrukcja, aby powrócić do poprzedniego kontekstu.Wywołujący instrukcja operacji PRZYWRACANIA musi być w tej samej bazy danych, w którym wystąpiło personifikację.

Przykład

W poniższym przykładzie François Ajenstat, administrator bazy danych dla firmy Adventure Works cyklu, chce zestawienia CHECKDB DBCC przed AdventureWorksDW bazy danych, ale które nie ma uprawnień poziom bazy danych, w tym celu.Jednakże ma on jednak PERSONIFIKACJI, uprawnienia użytkownika dan1, konto, które ma wymaganych uprawnień.

Kiedy François łączy się z AdventureWorksDW bazy danych, kontekst wykonania jest mapowany na jego tokenu zabezpieczeń użytkownika.Uprawnienia, aby wykonać instrukcje są porównywane z głównych podstawowych i pomocniczych w jego token użytkownika.Ponieważ nie ma on uprawnienia wymagane do zestawienia CHECKDB DBCC, jest on wykonywany następujące instrukcje.

-- EXECUTE AS USER = 'dan1';
-- Create a table in dan1's default schema
CREATE TABLE t_NewTable( data nvarchar(100) );
go
-- Revert to the previous execution context.
REVERT
go;

Niejawna przełączania kontekstu

Kontekst wykonywania na module, takie jak procedura przechowywana, wyzwalacza, kolejki lub funkcja zdefiniowanej przez użytkownika mogą być zmieniane niejawnie przez podanie nazwy użytkownika lub logowania w wykonać AS klauzula definicji modułu.

Przez określenie kontekstu, w którym jest wykonywane w module, można kontrolować, które konto użytkownika SQL Server używa do sprawdzania uprawnień do wszystkich obiektów zawiera odwołanie do modułu. Zapewnia dodatkową elastyczność i kontrolę w zarządzaniu uprawnienia w łańcuchu obiekt, który istnieje między modułami zdefiniowanej przez użytkownika i obiektów zawiera odwołanie do tych modułów.Uprawnienia mogą być przyznawane użytkownikom w module, bez konieczności udzielić określonych uprawnień dotyczących obiektów, do którego istnieje odwołanie.Tylko użytkownik personifikuje moduł musi mieć uprawnienia do obiektów, dostęp do modułu.

Poziom personifikacji zależy od rodzaju modułu, w której zdefiniowane jest personifikację.

Personifikacja poziom serwera można zdefiniować w następujących czynności:

  • Wyzwalacze kod DDL

Zakres serwera poziom personifikacji jest taka sama, jak poprzednio zdefiniowany w "przełączanie kontekstu jawne poziomie serwera. „

Bazy danych poziom personifikacji mogą być definiowane w następujących czynności:

  • Wyzwalacze DML

  • Kolejki

  • Procedury przechowywane

  • Funkcje zdefiniowane przez użytkownika

  • Zakres bazy danych poziom personifikacji jest taka sama, jak poprzednio zdefiniowany w "Explicit bazy danych na poziomie kontekst przełączanie. „

  • Aby uzyskać więcej informacji o przełączaniu niejawnego kontekstu zobacz Using EXECUTE AS in Modules.

Przykład

W poniższym przykładzie Mary jest właścicielem tabela MyTable. Chce użytkowników Scott mogły być obcięta z tabela, ale Scott nie ma bezpośredniego uprawnień w tabela.Tak więc użytkownik tworzy procedura przechowywana dbo.usp_TruncateMyTable uprawnienia wykonać dotacji na procedurę Scott i. Gdy procedura przechowywana wykonuje Scott Database Engine sprawdza uprawnienia, aby obciąć tabela tak, jakby Mary sobie zostały wykonywanie procedury przechowywanej. Ponieważ użytkownik jest właścicielem tabela, w instrukcja powiedzie się, mimo że Scott nie ma bezpośredniego uprawnień w samej tabela.

CREATE PROCEDURE dbo.usp_TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;