EXECUTE AS frente a SETUSER

En SQL Server, el contexto en que se ejecuta una cadena, un comando o un módulo se puede establecer explícitamente mediante la instrucción EXECUTE AS. EXECUTE AS reemplaza la instrucción SETUSER. Para obtener más información sobre el cambio de contexto, vea Descripción del cambio de contexto.

Comparar la funcionalidad del cambio de contexto

En comparación con la instrucción SETUSER, EXECUTE AS ofrece las siguientes ventajas:

  • Las entidades de seguridad de servidor o de base de datos distintas de sa o dbo pueden llamar a EXECUTE AS.

    El usuario que llama a la instrucción EXECUTE AS debe tener permisos IMPERSONATE en la entidad de seguridad de destino.

    SETUSER está restringida a los miembros de la función fija de servidor sysadmin o de la función fija de base de datos db_owner.

  • El ámbito de la suplantación se define explícitamente en la instrucción.

    La entidad de seguridad indicada se especifica como LOGIN, una suplantación en el nivel de servidor, o como USER, una suplantación en el nivel de base de datos.

    El ámbito de la suplantación en la instrucción SETUSER es implícito. Si un miembro de sysadmin llama a la instrucción, la suplantación se aplica en el nivel de servidor. Si la llamada a la instrucción la efectúa una cuenta que es dbo, la suplantación se aplica en el nivel de base de datos.

  • La suplantación está en vigor hasta que se produce una de las siguientes situaciones:

    • Se quita la sesión.

    • Se cambia el contexto a otro inicio de sesión o usuario.

    • El contexto se revierte al contexto de ejecución anterior.

    Con SETUSER, la suplantación está en vigor hasta que se produce una de las siguientes situaciones:

    • Se emite otra instrucción SETUSER.

    • Una cuenta que es dbo o miembro de la función fija de servidor sysadmin cambia la base de datos activa con la instrucción USE.

  • Puede crear una pila de contextos de ejecución si llama a la instrucción EXECUTE AS varias veces en diversas entidades de seguridad. Cuando se llama, la instrucción REVERT cambia el contexto al inicio de sesión o el usuario del siguiente nivel en la pila de contextos. Para obtener más información, vea EXECUTE AS (Transact-SQL).

    SETUSER no permite la creación de una pila de contextos de ejecución.

Revertir a un contexto anterior

EXECUTE AS

Utilice la instrucción REVERT para volver al contexto anterior. El usuario que llama a la instrucción REVERT debe estar incluido en la misma base de datos donde se ha producido la suplantación.

SETUSER

Para volver al contexto anterior, use la instrucción SETUSER sin especificar un nombre de usuario.