Opis przełączania kontekstu

Kontekst wykonania jest określone przez użytkownika lub podłączonego do sesja logowania lub nakaz (wywołanie) modułu.Ustanawia ona tożsamości przeciwko uprawnienia do wykonywania instrukcji lub wykonać akcje są sprawdzane.W SQL Server, kontekst wykonywania mogą być przełączane do innego użytkownika lub logowania przez wykonywanie jako wykonywanie instrukcja lub określanie jako EXECUTE klauzula w module.Po przełączanie kontekstu, SQL Server sprawdza uprawnienia logowania i użytkownika dla tego konta zamiast osoby wywoływania wykonywanie instrukcja lub module.Użytkownik bazy danych lub konto logowania do programu SQL Server jest traktowane pozostałą wykonywania sesja lub moduł lub do przełączanie kontekstu jest jawnie przywrócone.Aby uzyskać więcej informacji na temat Kontekst wykonywania, zobacz Opis kontekstu wykonania.

Jawne przełączania kontekstu

Kontekst wykonywania sesja lub moduł można jednoznacznie zmieniony przez podanie nazwy użytkownika lub logowania w AS wykonywanie instrukcja.Personifikację obowiązuje, dopóki nie wystąpi jedno z następujących zdarzeń:

  • Sesja jest odrzucany.

  • Kontekst przełączania do innego logowania lub użytkownika.

  • Kontekst jest przywrócone do poprzedniego kontekstu wykonanie.

Za pomocą EXECUTE do jawnie podszyć się pod innego użytkownika jest podobny do SETUSER w starszych wersjach SQL Server.Aby uzyskać więcej informacji, zobacz WYKONYWANIE jako vs. SETUSER.

Jawne przełączania kontekstu poziom serwera

Należy przełączyć kontekst wykonanie poziom serwera, należy użyć logowania jako wykonanie = "login_name' Instrukcja.Nazwa logowania musi być widoczny jako podmiotu w sys.server_principals, a wywołującego instrukcja musi posiadać uprawnienia PERSONIFIKUJ na nazwę logowania określonego.

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 nieprawidłowy dla tego wystąpienia.

  • Poziom serwera uprawnień i członkostwa roli login_name są honorowane.

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

Przykład

W poniższym przykładzie Peterowi Connelly, Adventure Works cykli, administrator sieci chce utworzyć SQL Server konto logowania dla nowego pracownika, Jinghao Liuhas.Piotra SQL Server logowania nie ma uprawnień poziom serwera, wymagane do utworzenia SQL Server logowania, ale mają uprawnienia PERSONIFIKUJ adventure-works\dan1, SQL Server logowania ma wymagane uprawnienia poziom serwera.Gdy Peter połączy się z SQL Server, w kontekście wykonywania sesja pochodzi z jego SQL Server logowania.Aby utworzyć SQL Server logowania, Peter tymczasowo zakłada kontekście wykonanie adventure-works\dan1.Tworzy on następnie logowania.Wreszcie 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ć użytkownika jako wykonanie = "user_name' Instrukcja.Nazwa użytkownika musi istnieć jako podmiotu w sys.database_principals i instrukcja rozmówcy musi mieć uprawnienia PERSONIFIKUJ określona nazwa użytkownika.

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

  • Token użytkownika dla user_name jest uwierzytelniany przez wystąpienie SQL Server i jest prawidłowy w bieżącej bazie danych.Aby uzyskać informacje dotyczące sposobów rozszerzania możliwości personifikacji użytkownika poza zakres z bieżącej bazy danych, zobacz Rozszerzanie bazy danych personifikacji przy użyciu jako EXECUTE.

  • Baza danych poziom uprawnień i członkostwa roli user_name w bieżącej bazie danych są honorowane.Poziom serwera uprawnienia udzielone jawnie tożsamości w tokenie użytkownika lub członkostwa roli nie są honorowane.

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

Przykład

W poniższym przykładzie chce uruchomić DBCC CHECKDB François Ajenstat, administrator bazy danych dla cykli Adventure Works instrukcja przeciwko AdventureWorksDW bazy danych, ale on nie ma uprawnień poziom bazy danych, w tym celu.Jednak on uprawnienia PERSONIFIKUJ użytkownika dan1, konto ma wymagane uprawnienia.

Gdy François połączy się z AdventureWorksDW bazy danych, w kontekście wykonywania mapuje jego tokenu zabezpieczeń użytkownika.Uprawnienia do wykonać sprawozdania są porównywane z podstawowego i pomocniczego podmiotów w jego token użytkownika.Ponieważ nie ma on uprawnienia wymagane do uruchomienia DBCC CHECKDB instrukcja, on wykonuje następujące instrukcjas.

-- 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 modułu, takich jak procedura składowana, wyzwalacza, kolejki lub funkcja zdefiniowanej przez użytkownika można zmienić niejawnie przez podanie nazwy użytkownika lub logowania w EXECUTE AS klauzula definicji modułu.

Określając kontekstu, w którym wykonywane jest moduł, którego konta użytkownika można sterować SQL Server używa do sprawdzania uprawnień obiektom odwołuje się moduł.Zapewnia elastyczność i kontrolę w Zarządzanie uprawnieniami całej łańcucha obiektu, który istnieje między modułów zdefiniowanych przez użytkownika i obiekty odwołuje się tych modułów.Uprawnienia mogą być przyznane użytkownikom modułu, bez konieczności udzielić uprawnienia jawne odwołania obiektów.Tylko moduł personifikuje użytkownika musi mieć uprawnienia obiektów, dostęp do modułu.

Poziom personifikacji jest określane przez typ modułu, w którym zdefiniowano personifikację.

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

  • Wyzwalacze DDL

Zakres serwera poziom personifikacji jest taki sam jak uprzednio określonych w "Przełączanie kontekstu jawne poziom serwera."

Poniżej można zdefiniować bazy danych poziom personifikacji:

  • DMLWyzwalacze

  • Kolejki

  • Procedury przechowywane

  • Funkcje zdefiniowane przez użytkownika

  • Zakres bazy danych poziom personifikacji jest taki sam jak uprzednio określonych w "Przełączanie kontekstu jawne poziom bazy danych."

  • Aby uzyskać więcej informacji o przełączaniu niejawnego kontekstu, zobacz Używając jako wykonywanie modułów.

Przykład

W poniższym przykładzie Mary jest właścicielem tabela MyTable.Chce użytkowników Scott może obciąć tabela, ale Scott nie ma bezpośredniego uprawnień w tabela.Tak więc, tworzy procedura składowana dbo.usp_TruncateMyTable i udziela uprawnienia wykonywania na procedurę Scott.Gdy Scott wykonuje procedura składowana Aparat baz danych sprawdza uprawnienia obciąć tabela tak, jakby Maria talonu były wykonywanie procedura składowana.Ponieważ użytkownik jest właścicielem tabela instrukcja powiedzie się, mimo że Scott nie ma bezpośredniego uprawnień na samej tabela.

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