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.
Consulte também