Compartilhar via


EXECUTE AS versus SETUSER

No SQL Server, o contexto no qual uma cadeia, um comando ou um módulo é executado pode ser explicitamente definido usando a instrução EXECUTE AS. EXECUTE AS substitui a instrução SETUSER. Para obter mais informações sobre alternância de contexto, consulte Compreendendo alternância de contexto.

Comparando a funcionalidade da alternância de contexto

Comparada à instrução SETUSER, EXECUTE AS tem as seguintes vantagens:

  • As entidade de servidor e banco de dados diferentes de sa ou dbo podem chamar EXECUTE AS.

    O usuário que chama a instrução EXECUTE AS deve ter as permissões IMPERSONATE na entidade de destino.

    SETUSER está restrita a membros da função de servidor fixa sysadmin ou à função de banco de dados fixa db_owner.

  • O escopo da representação é explicitamente definido na instrução.

    A entidade determinada é especificada como LOGIN, uma representação de nível de servidor, ou como USER, uma representação de nível de banco de dados.

    O escopo da representação na instrução SETUSER está implícito. Se a instrução for chamada por um membro de sysadmin, a representação de nível de servidor será usada. Se a instrução for chamada por uma conta que é dbo, a representação de nível de banco de dados será usada.

  • A representação permanece em vigor até que um dos seguintes eventos ocorra:

    • A sessão seja descartada.

    • O contexto seja alternado para outro logon ou usuário.

    • O contexto seja revertido ao contexto de execução anterior.

    Com SETUSER, a representação permanece em vigor até que um dos seguintes eventos ocorra:

    • Outra instrução SETUSER seja emitida.

    • O banco de dados atual seja alterado com a instrução USE por uma conta que seja dbo ou seja membro da função de servidor fixa sysadmin.

  • Você pode criar uma pilha de contexto de execução chamando a instrução EXECUTE AS várias vezes em várias entidades. Quando chamada, a instrução REVERT alterna o contexto para o logon ou usuário no nível acima seguinte da pilha de contexto. Para obter mais informações, consulte EXECUTE AS (Transact-SQL).

    SETUSER não permite que uma pilha de contexto de execução seja criada.

Revertendo a um contexto anterior

EXECUTE AS

Use a instrução REVERT para retornar ao contexto anterior. O chamador da instrução REVERT deve estar no mesmo banco de dados onde a representação ocorreu.

SETUSER

Para voltar ao contexto anterior, use a instrução SETUSER sem especificar um nome de usuário.