Confronto tra EXECUTE AS e SETUSER
In SQL Server il contesto in cui una stringa, un comando o un modulo viene eseguito può essere impostato in modo esplicito utilizzando l'istruzione EXECUTE AS. EXECUTE AS sostituisce l'istruzione SETUSER. Per ulteriori informazioni sul cambio di contesto, vedere Informazioni sul cambio di contesto.
Confronto tra le funzionalità per il cambio di contesto
Rispetto all'istruzione SETUSER, EXECUTE AS presenta i vantaggi seguenti:
EXECUTE AS può essere chiamata da entità server o di database diverse da sa o dbo.
L'utente che chiama l'istruzione EXECUTE AS deve avere autorizzazioni IMPERSONATE sull'entità di destinazione.
L'istruzione SETUSER può essere utilizzata solo dai membri del ruolo predefinito del server sysadmin o del ruolo predefinito del database db_owner.
L'ambito di rappresentazione è definito in modo esplicito nell'istruzione.
L'entità desiderata viene specificata come LOGIN, una rappresentazione a livello di server, o come USER, una rappresentazione a livello di database.
Nell'istruzione SETUSER l'ambito di rappresentazione è definito in modo implicito. Se l'istruzione viene chiamata da un membro del ruolo sysadmin, verrà utilizzata la rappresentazione a livello di server. Se l'istruzione viene chiamata da un account dbo, verrà utilizzata la rappresentazione a livello di database.
La rappresentazione resta valida fino a quando non si verifica uno degli eventi seguenti:
La sessione viene eliminata.
Il contesto passa a un altro utente o account di accesso.
Viene ripristinato il contesto di esecuzione precedente.
Con SETUSER la rappresentazione resta valida fino a quando non si verifica uno degli eventi seguenti:
Viene eseguita un'altra istruzione SETUSER.
Il database corrente viene cambiato con l'istruzione USE da un account dbo o da un account membro del ruolo predefinito del server sysadmin.
È possibile creare uno stack dei contesti di esecuzione chiamando l'istruzione EXECUTE AS più volte da più entità. Quando viene chiamata, l'istruzione REVERT ripristina il contesto dell'account di accesso o dell'utente memorizzato nel successivo livello superiore nello stack dei contesti. Per ulteriori informazioni, vedere EXECUTE AS (Transact-SQL).
L'istruzione SETUSER non consente la creazione di uno stack dei contesti di esecuzione.
Ripristino di un contesto precedente
EXECUTE AS
Per ripristinare il contesto precedente, utilizzare l'istruzione REVERT. Il chiamante dell'istruzione REVERT deve trovarsi nello stesso database in cui ha avuto luogo la rappresentazione.
SETUSER
Per tornare al contesto precedente, utilizzare l'istruzione SETUSER senza specificare alcun nome utente.
Vedere anche