logo
SQL2008_Administration

4.4.2 Изменение контекста выполнения

После предоставаления права IMPERSONATE можно использовать возможности выражения EXECUTE AS:

-- Переключаемся в контекст выполнения User2:

EXECUTE AS USER = 'User2';

-- Обращаемся к таблице Table2:

SELECT * FROM dbo.Table2;

-- Возвращаемся в контекст выполнения User1:

REVERT;

Чаще всего выражение EXECUTE AS используется в определениях программных модулей Transact-SQL (процедур или функций). Это позволяет менять контекст выполнения только на время работы данной хранимой процедуры или функции, например:

CREATE PROCEDURE SelectFromTable2

WITH EXECUTE AS 'User2'

AS SELECT * FROM dbo.Table2;

В случае, если выражение EXECUTE AS используется в хранимой процедуре или функции, ему можно передать несколько зарезервированных значений, которые можно подставлять вместо имени пользователя:

Выражение EXECUTE AS можно использовать не только для изменения контекста выполнения на уровне базы данных, но и на уровне сервера (то есть учетных записей). Для этой цели ключевое слово USER меняется на LOGIN, например:

EXECUTE AS LOGIN = 'Login2';