Using EXECUTE AS in Modules
wykonać AS mogą być używane do określania kontekście wykonać następujących modułów zdefiniowanej przez użytkownika: funkcji, procedur, kolejek i wyzwalaczy. Na przykład kontekst wykonywania mogą być przełączane od rozmówcy modułu do właściciela modułu lub do określonego użytkownika.We wcześniejszych wersjach SQL Server, te moduły zawsze wykonać w kontekście wywołującego w module.
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 wszystkich 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.Użytkownicy modułu tylko niezbędne są uprawnienia do wykonywania moduł sam; określonych uprawnień dotyczących obiektów, do którego istnieje odwołanie, nie są wymagane.Tylko moduł działa jako użytkownik musi mieć uprawnienia do obiektów, które są dostępne w module.
wykonać JAKO OBIEKT WYWOŁUJĄCY
WYWOŁUJĄCY AS wykonać Określa, że instrukcje wewnątrz modułu są wykonać w kontekście wywołującego modułu.
Użyj wykonać obiektu WYWOŁUJĄCEGO AS w następujących scenariuszach:
Chcesz, aby instrukcje w module wykonać jako użytkownik wywołujący.
Chcesz oprzeć kontroli uprawnień dla instrukcji w module przed użytkownika wywołującego i polegać wyłącznie na własność, tworzenie łańcuchów do pominięcia sprawdzania uprawnień dla obiektów podstawowych.Należy pamiętać, że tworzenie łańcucha własności stosuje się tylko do DML instrukcji.Aby uzyskać więcej informacji na temat Tworzenie łańcucha własności zobacz Ownership Chains.
Aplikacja nie wymaga ukrywania podstawowej odwołuje się do obiektów od użytkownika, lub tylko obiekty odwołanie do tego samego właściciela i w związku z tym może polegać na własność, tworzenie łańcuchów zapewniające ukrywanie schematu.
Potrzeba zachowania programu SQL Server 2000.
wykonać AS scenariusz WYWOŁUJĄCEGO
Jan tworzy procedura przechowywana, która odwołuje się ta nie jest właścicielem, ale ma uprawnienia SELECT na tabela.Określa ona EXECUTE AS CALLER w CREATE PROCEDURE instrukcja, jak pokazano w poniższym przykładzie:
CREATE PROCEDURE AccessTable
WITH EXECUTE AS CALLER
AS SELECT * FROM dbo.SomeTable;
Następnie Jan przyznaje uprawnienia wykonać do procedura przechowywana Scott.Gdy procedura przechowywana wykonuje Scott Database Engine sprawdza, czy ma on (wywołujący) uprawnienia do wykonać procedury przechowywanej. Scott ma uprawnienie wykonać, ale ponieważ Joanna nie jest właścicielem tabela, do którego istnieje odwołanie, Database Engine sprawdza, czy Scott ma uprawnienia w tabela. Jeśli Scott nie ma uprawnień, instrukcja procedura przechowywana nie powiedzie się.
Nazwa_użytkownika wykonać AS
wykonać JAKO user_name, określa wykonać instrukcji w module w kontekście użytkownika określonego w user_name.
Za pomocą wykonać AS user_name w następujących scenariuszach:
Chcesz, aby instrukcje w module wykonać w odniesieniu do określonego użytkownika.
Nie można polegać na tworzenie łańcucha własności (uzyskuje dostęp na przykład moduł do obiektów za pomocą różnych własność) Aby ukryć podstawowej schematu i chcesz uniknąć przyznawania uprawnień do tych obiektów, do którego istnieje odwołanie.
Chcesz utworzyć zestaw niestandardowych uprawnień.Na przykład udzielenia uprawnień do DDL operacje, dla których określone uprawnienia nie zazwyczaj można udzielić.Aby uzyskać więcej informacji zobaczUsing EXECUTE AS to Create Custom Permission Sets.
Uwaga
Użytkownik, który został określony w kontekście wykonanie modułu nie można go usunąć, dopóki kontekście wykonanie tego modułu została zmieniona.
Nazwa_użytkownika wykonać jako scenariusza
Jan tworzy procedura przechowywana, która odwołuje się ta nie jest właścicielem, ale ma uprawnienia SELECT na tabela.Określa ona EXECUTE AS 'Mary' w CREATE PROCEDURE instrukcja, jak pokazano w poniższym przykładzie:
CREATE PROCEDURE AccessMyTable
WITH EXECUTE AS 'Mary'
AS SELECT * FROM dbo.MyTable;
Maria Scott przyznaje uprawnienia wykonać do procedura przechowywana.Gdy procedura przechowywana wykonuje Scott Database Engine sprawdza, czy ma on uprawnienia do wykonać procedury przechowywanej, jednak dla Mary sprawdzane są uprawnienia dla tabela, do którego istnieje odwołanie. W tym scenariuszu mimo że Scott bezpośrednio ma uprawnienia SELECT na tabela, on może uzyskać dostęp do danych za pomocą tej procedury, ponieważ Mary, w którego kontekście działa procedury, ma uprawnienia dostępu do danych w tabela.
wykonać JAKO SAMOSPRZĘŻENIA
wykonać AUTOMATYCZNEJ AS jest równoznaczne z wykonać AS user_name, w przypadku, gdy określony użytkownik jest osobą, tworzenia lub modyfikowania modułu.
Użyj AUTOMATYCZNEJ AS wykonać w następujących scenariuszach:
Określając siebie jako użytkownik, w którego kontekście, którą chcesz uruchomić instrukcji modułu, tworzenia lub modyfikowania do uruchamiania jako skrót, który ma.
Program aplikacji, która tworzy modułów dla wywołania do niej użytkowników i ma te moduły ma zostać utworzony przy użyciu tych użytkowników, jak kontekst wykonywania.W takim przypadku nie jest znany w projekcie czas co to jest nazwa użytkownika wywołującego.
wykonać JAKO WŁAŚCICIEL
WŁAŚCICIEL AS wykonać 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.
Użyj wykonać jako właściciel w następującej sytuacji:
- Chcesz zmieniać bez konieczności zmodyfikuj moduł sam właściciela modułu.Oznacza to właściciel automatycznie mapuje bieżącego właściciela modułu w czasie wykonywania.
WŁAŚCICIEL jest jawne właścicielem modułu lub, jeśli jest jawne właściciela, właściciel schematu modułu przy czas jest wykonywane w module.WŁAŚCICIEL musi być kontem pojedynczych i nie grupy lub roli.Nie można zmienić własność modułu Grupa lub rola, jeśli moduł określa wykonać jako właściciel i ma jawne właściciela.Nie można zmienić właściciela schematu do roli lub grupy, jeśli zawiera moduł, który określa wykonać jako właściciel i moduły nie ma jawnych właściciela.
wykonać AS scenariusz właściciel
Jan tworzy procedura przechowywana, która odwołuje się do tabela, które użytkownik jest właścicielem.Określa ona EXECUTE AS OWNER w CREATE PROCEDURE instrukcja, jak pokazano w poniższym przykładzie:
CREATE PROCEDURE Mary.AccessMyTable
WITH EXECUTE AS OWNER
AS SELECT * FROM Mary.MyTable;
Maria Scott przyznaje uprawnienia wykonać do procedura przechowywana.Gdy procedura przechowywana wykonuje Scott Database Engine sprawdza, czy ma on uprawnienia do wykonać procedury przechowywanej, jednak są sprawdzane uprawnienia dla tabela, do którego istnieje odwołanie dla Mary ponieważ Eva jest bieżącym właścicielem tej procedury. Jan decyduje się pozostawić firmy i zmieni własność procedury i tabela Tomasz.Podczas Scott procedura przechowywana jest wykonywana po zmianie własności, jest on nadal mieć dostęp do danych za pomocą tej procedury, ponieważ właściciel jest automatycznie mapowane na Tomasz.