EXECUTE AS Clause (Transact-SQL)

W SQL Server można zdefiniować kontekście wykonanie następujących modułów zdefiniowanej przez użytkownika: funkcji (z wyjątkiem wbudowane funkcje wycenione tabela), procedur, kolejek i wyzwalaczy.

Przez określenie kontekstu, w którym jest wykonywane w module, można kontrolować, które konto użytkownika Database Engine używa do sprawdzania uprawnień do obiektów, do których odwołuje się moduł. 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.Dla użytkowników tylko w module, bez konieczności udzielić im określonych uprawnień dotyczących obiektów, do którego istnieje odwołanie, należy udzielić uprawnień.Tylko moduł działa jako użytkownik musi mieć uprawnienia do obiektów, dostęp do modułu.

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

Functions (except inline table-valued functions), Stored Procedures, and DML Triggers
{ EXEC | EXECUTE } AS { CALLER | SELF | OWNER | 'user_name' } 

DDL Triggers with Database Scope
{ EXEC | EXECUTE } AS { CALLER | SELF | 'user_name' } 

DDL Triggers with Server Scope and logon triggers
{ EXEC | EXECUTE } AS { CALLER | SELF | 'login_name' } 

Queues
{ EXEC | EXECUTE } AS { SELF | OWNER | 'user_name' } 

Argumenty

  • OBIEKT WYWOŁUJĄCY
    Określa instrukcji wewnątrz modułu są wykonywane w kontekście wywołującego modułu.Wykonywanie modułu użytkownik musi mieć odpowiednie uprawnienia, nie tylko samego modułu, ale w żadnych obiektów bazy danych, do których odwołuje się moduł.

    Obiekt WYWOŁUJĄCY jest domyślne dla wszystkich modułów, z wyjątkiem kolejek i jest taka sama, jak SQL Server 2005 zachowanie.

    Obiekt WYWOŁUJĄCY nie może być określone w instrukcja CREATE QUEUE lub ALTER QUEUE.

  • SAMODZIELNIE
    wykonać AUTOMATYCZNEJ AS jest równoznaczne z wykonać AS user_name, w przypadku, gdy określony użytkownik jest osobą, tworzenia lub zmiany w module. Identyfikator użytkownika rzeczywistej osoby, tworzenia lub modyfikowania modułów są przechowywane w execute_as_principal_id kolumnasys.sql_modules or sys.service_queues Służy do wyświetlania katalogu.

    Auto jest ustawienie domyślne dla kolejki.

    Uwaga

    Aby zmienić identyfikator użytkownika, execute_as_principal_id in the sys.service_queues wykazu widoku, należy jawnie określić wykonać AS ustawienie w instrukcja ALTER QUEUE.

  • WŁAŚCICIEL
    Określa instrukcji wewnątrz modułu jest wykonywany w kontekście bieżącego właściciela modułu.Jeśli moduł nie ma określonego właściciela, właściciel schematu modułu jest używany.WŁAŚCICIEL nie może być określone dla wyzwalaczy DDL lub logowania.

    Important noteImportant Note:

    WŁAŚCICIEL musi być mapowane na konto pojedynczych i nie może być roli lub grupy.

  • 'user_name'
    Określa, wykonać instrukcji w module w kontekście użytkownika określonego w user_name. Permissions for any objects within the module are verified against user_name.user_name cannot be specified for DDL triggers with server scope or logon triggers.Użycie login_name w zamian.

    user_name must exist in the current database and must be a singleton account.user_name cannot be a group, role, certificate, key, or built-in account, such as NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService, or NT AUTHORITY\LocalSystem.

    Identyfikator użytkownika, kontekst wykonania jest przechowywany metadane i mogą być przeglądane w execute_as_principal_id kolumnasys.sql_modules or sys.assembly_modules Służy do wyświetlania katalogu.

  • 'login_name'
    Określa, wykonać instrukcji w module w kontekście SQL Server Identyfikator logowania, określonego w login_name. Permissions for any objects within the module are verified against login_name.login_name can be specified only for DDL triggers with server scope or logon triggers.

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

Remarks

W jaki sposób Database Engine oblicza uprawnienia do obiektów, do których istnieją odwołania w module zależy od łańcuch własności, który istnieje między wywołaniem obiekty i obiekty, do którego istnieje odwołanie. We wcześniejszych wersjach SQL Server, tworzenie łańcucha własności jest jedyną metodą można uniknąć konieczności wywoływania dostęp użytkownika do odwołania wszystkich obiektów.

Tworzenie łańcucha własności ma następujące ograniczenia:

  • Dotyczy tylko DML instrukcji: SELECT, INSERT, UPDATE i DELETE.

  • Właścicieli obiektów o nazwie i wywołujący musi być taka sama.

  • Nie ma zastosowania do dynamicznego kwerendy wewnątrz modułu.

Aby uzyskać więcej informacji na temat Tworzenie łańcucha własności zobacz Ownership Chains.

Niezależnie od kontekstu wykonanie określonej w module zawsze stosuje następujące czynności:

  • Podczas wykonywania moduł Database Engine najpierw sprawdza, czy użytkownik wykonuje moduł ma uprawnienie wykonać w module.

  • Nadal stosować zasady łańcucha własności.Oznacza to, że jeśli właścicieli obiektów wywołujących i nazywane są takie same, sprawdza Brak uprawnień dla obiektów podstawowych.

Gdy użytkownik wykonuje moduł, który został określony na uruchomienie w kontekście innych niż obiekt WYWOŁUJĄCY, uprawnienia użytkownika do wykonać w module jest zaznaczone, ale dodatkowe uprawnienia dla obiektów, które są dostępne przez moduł są sprawdzane przed konta użytkownika określonego w wykonać AS klauzula.Użytkownik wykonywania moduł jest, w efekcie Uosabianie określonego użytkownika.

Kontekst, określone w wykonać AS klauzula modułu jest prawidłowa tylko na czas trwania działania modułu.Po zakończeniu wykonywania moduł kontekstu zostanie przywrócona do obiektu wywołującego.Aby uzyskać więcej informacji na temat przełączania kontekstu wykonania w module zobacz Using EXECUTE AS in Modules.

Określanie użytkownika lub nazwa logowania

Identyfikator użytkownika lub serwer logowania bazy danych określona w EXECUTE AS klauzula modułu nie można go usunąć, aż do modułu została zmodyfikowana tak, aby wykonać w innym kontekście.

Nazwa użytkownika lub logowania, określonego w klauzula wykonać AS musi istnieć jako podmiotu w sys.database_principals or sys.server_principals, odpowiednio, lub inna tworzenia lub zmiany modułu operacja kończy się niepowodzeniem.Ponadto użytkownik, który tworzy lub zmienia w module musi mieć uprawnienia PERSONIFIKACJI kapitału.

Jeśli użytkownik ma zawsze dostęp do bazy danych lub wystąpienie SQL Server poprzez członkostwo grupy systemu Windows użytkownika określone w wykonać AS klauzula niejawnie jest tworzone przy tworzeniu modułu po istnieje jeden z następujących warunków:

  • Jest określony użytkownik lub logowania element członkowski z sysadmin ustalić roli serwera.

  • Użytkownik, który tworzy moduł ma uprawnienie do tworzenia podmiotów.

Jeśli żadna z te wymagania są spełnione, operacja tworzenia modułu nie powiedzie się.

Important noteImportant Note:

Jeśli SQL Server (MSSQLSERVER) jest uruchomiona w lokalnym koncie (lokalnej usługa lub konta użytkowników lokalnych), nie mają uprawnień do uzyskania członkostwo grup konta domena systemu Windows, podanego w wykonać AS klauzula. Spowoduje to wykonanie modułu nie powiedzie się.

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 w związku z tym ma dostęp do Sprzedaż bazy danych.

  • Tworzenie lub modyfikowanie moduł użytkownika ma uprawnienia do tworzenia podmiotów.

Gdy następuje CREATE PROCEDURE Instrukcja jest uruchamiana, CompanyDomain\SqlUser1 Domyślnie tworzony jest jako bazy danych głównych w Sales Baza danych.

USE Sales;
GO
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'CompanyDomain\SqlUser1'
AS
SELECT user_name();
GO

Za pomocą wykonać AS obiektu WYWOŁUJĄCEGO Stand-Alone wyciągu

Ustawić kontekstu wykonać do obiektu wywołującego modułu, należy użyć instrukcja autonomicznych wykonać obiektu WYWOŁUJĄCEGO AS wewnątrz modułu.

Przyjmuje następującą procedura przechowywana jest wywoływany przez SqlUser2.

CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS 'SqlUser1'
AS
SELECT user_name(); -- Shows execution context is set to SqlUser1.
EXECUTE AS CALLER;
SELECT user_name(); -- Shows execution context is set to SqlUser2, the caller of the module.
REVERT;
SELECT user_name(); -- Shows execution context is set to SqlUser1.
GO

Za pomocą wykonać AS definiować zestawy uprawnień niestandardowych

Określanie kontekstu wykonania dla modułu może być bardzo użyteczne, gdy mają zostać zdefiniowane uprawnienia niestandardowe ustawienie.Na przykład niektóre czynności, takich jak PRZYCINANIE tabela, nie masz uprawnień grantable.Dołączanie instrukcja OBCINANIA tabela w module oraz określanie, wykonać tego modułu jako użytkownik z uprawnieniami do zmiany w tabela, można rozszerzyć uprawnienia, aby obciąć tabela do użytkownika, któremu udzielasz uprawnienia wykonać w module.Aby uzyskać więcej informacji zobaczUsing EXECUTE AS to Create Custom Permission Sets.

Aby wyświetlić definicję modułu w kontekście określonego wykonanie, należy użyć sys.sql_modules (Transact-SQL) Służy do wyświetlania katalogu.

Najważniejsze wskazówki

Określ identyfikator logowania lub użytkownik, który ma co najmniej uprawnienia wymagane do wykonywania operacji, zdefiniowane w module.Na przykład nie określono konta właściciela do bazy danych, chyba że te uprawnienia są wymagane.

Uprawnienia

wykonać modułu określonego w wykonać AS, obiekt wywołujący musi mieć uprawnienia wykonać modułu.

wykonać CLR modułu określonego w AS wykonać, który uzyskuje dostęp do zasobów w innej bazie danych lub serwera, obiekt miejsce docelowe bazy danych lub serwera musi ufać uwierzytelniającym bazy danych, z którego modułu pochodzi (źródłowa baza danych).Aby uzyskać więcej informacji na temat ustanawiania zaufania wystawca uwierzytelnienia Zobacz Extending Database Impersonation by Using EXECUTE AS.

Aby określić wykonać AS klauzula podczas tworzenia lub modyfikowania moduł, musisz mieć uprawnienia PERSONIFIKACJI spłaty kapitału w określonym, a także uprawnienia do tworzenia modułu.Zawsze może personifikować użytkownika.Kontekst wykonywania nie został określony lub wykonać obiektu WYWOŁUJĄCEGO AS jest określony, nie są wymagane uprawnienia PERSONIFIKACJI.

Aby określić, login_name lub user_name zawierającego niejawna dostęp do bazy danych poprzez członkostwo w grupie systemu Windows, trzeba mieć uprawnienia Kontrola w bazie danych.

Przykłady

Poniższy przykład tworzy procedura przechowywana i przypisuje kontekstu wykonania dla OWNER.