Utilizzo di EXECUTE AS per la creazione di set di autorizzazioni personalizzati

Specificare il contesto di esecuzione di un modulo può essere molto utile nella definizione di set di autorizzazioni personalizzati. Ad esempio per alcune azioni, come TRUNCATE TABLE non sono disponibili autorizzazioni. Per eseguire TRUNCATE TABLE è necessario che l'utente disponga dell'autorizzazione ALTER per la tabella specificata. Concedere a un utente l'autorizzazione ALTER su una tabella non è consigliabile, perché l'utente disporrebbe di autorizzazioni ben superiori alla semplice possibilità di troncare la tabella.

Incorporando l'istruzione TRUNCATE TABLE in un modulo e specificando che tale modulo venga eseguito come un utente che dispone di autorizzazioni per la modifica della tabella è possibile estendere le autorizzazioni per il troncamento della tabella all'utente al quale si concede l'autorizzazione EXECUTE sul modulo.

Si consideri la stored procedure seguente:

CREATE PROCEDURE TruncateMyTable
WITH EXECUTE AS SELF
AS TRUNCATE TABLE MyDB..MyTable;

Si supponga che l'utente Mary crei la stored procedure e conceda all'utente Scott autorizzazioni EXECUTE su TruncateMyTable. Quando Scott esegue la stored procedure, Motore di database verifica le autorizzazioni al troncamento della tabella come se fosse Mary ad eseguire la stored procedure. Poiché Mary è la proprietaria della tabella, l'istruzione ha esito positivo anche se Scott non dispone di autorizzazioni dirette sulla tabella. Le autorizzazioni di Mary sono state estese a Scott in modo veloce ed efficiente, senza concedere a quest'ultimo autorizzazioni superiori a quelle strettamente necessarie per l'esecuzione dell'attività.