Поделиться через


EXECUTE AS и SETUSER

В сервере SQL Server 2005 контекст, в котором выполняется строка, команда или модуль, можно установить явно инструкцией EXECUTE AS. Инструкция EXECUTE AS заменяет инструкцию SETUSER. Дополнительные сведения о переключении контекста см. в разделе Основные сведения о контекстном переключении.

Сравнение возможностей переключения контекста

По сравнению с инструкцией SETUSER инструкция EXECUTE AS обладает следующими преимуществами:

  • Инструкцию EXECUTE AS могут вызывать не только sa и dbo, но и другие участники сервера или базы данных.
    Пользователь, который вызывает инструкцию EXECUTE AS, должен иметь разрешение IMPERSONATE для целевого участника.
    Инструкция SETUSER ограничена членами фиксированной серверной роли sysadmin или фиксированной роли базы данных db_owner.
  • Область олицетворения явно определяется в инструкции.
    Участник задается в форме имени входа при олицетворении на уровне сервера или в форме имени пользователя при олицетворении на уровне базы данных.
    Область олицетворения в инструкции SETUSER не является явной. Если инструкция вызывается членом sysadmin, применяется олицетворение на уровне сервера. Если инструкция вызывается учетной записью, принадлежащей dbo, применяется олицетворение на уровне базы данных.
  • Олицетворение действует до тех пор, пока не происходит одно из следующих событий:
    • Сеанс закрывается.
    • Контекст переключается на другое имя входа или пользователя.
    • Контекст восстанавливается в предыдущее состояние.
      При использовании инструкции SETUSER олицетворение действует до тех пор, пока не происходит одно из следующих событий:
    • Вызывается другая инструкция SETUSER.
    • С помощью инструкции USE учетной записью dbo или членом фиксированной серверной роли sysadmin выбирается другая база данных.
  • Стек контекстов выполнения можно создать вызовом нескольких инструкций EXECUTE AS для нескольких участников. При вызове инструкция REVERT переключает контекст на имя входа или имя пользователя следующего уровня стека. Дополнительные сведения см. в разделе EXECUTE AS (Transact-SQL).
    Инструкция SETUSER не поддерживает создание стека контекста выполнения.

Восстановление предыдущего контекста

Инструкция EXECUTE AS

Для восстановления предыдущего контекста используется инструкция REVERT. Объект, вызывающий инструкцию REVERT, должен находиться в базе данных, в которой произошло олицетворение.

Инструкция SETUSER

Для восстановления предыдущего контекста достаточно вызвать инструкцию SETUSER, не указывая имя пользователя.

См. также

Основные понятия

Участники

Другие ресурсы

Контекстное переключение
EXECUTE AS (Transact-SQL)
REVERT (Transact-SQL)
SETUSER (Transact-SQL)
sys.database_principals (Transact-SQL)
sys.server_principals (Transact-SQL)

Справка и поддержка

Получение помощи по SQL Server 2005