Condividi tramite


Personalizzazione delle autorizzazioni mediante la rappresentazione in SQL Server (ADO.NET)

In molte applicazioni vengono utilizzate le stored procedure per accedere ai dati, basandosi sul concatenamento delle proprietà per restringere l'accesso alle tabelle di base. È possibile concedere autorizzazioni EXECUTE sulle stored procedure, revocando o negando le autorizzazioni sulle tabelle di base. SQL Server non verifica le autorizzazioni del chiamante se il proprietario della stored procedure coincide con quello delle tabelle. Il concatenamento delle proprietà non funziona se i proprietari degli oggetti sono diversi oppure se si utilizzano istruzioni SQL dinamiche.

A partire da SQL Server 2005, è possibile utilizzare la clausola EXECUTE AS in una stored procedure quando il chiamante non dispone delle autorizzazioni sugli oggetti di database cui viene fatto riferimento. Per effetto della clausola EXECUTE AS il contesto di esecuzione viene passato all'utente proxy. Tutto il codice, nonché qualsiasi chiamata a stored procedure o trigger annidati, viene eseguito nel contesto di sicurezza dell'utente proxy. Viene ripristinato il contesto di esecuzione del chiamante originale solo dopo l'esecuzione della stored procedure o quando viene eseguita un'istruzione REVERT.

Cambio del contesto con l'istruzione EXECUTE AS

L'istruzione EXECUTE AS Transact-SQL consente di cambiare il contesto di esecuzione di un'istruzione mediante la rappresentazione di un altro account di accesso o utente del database. Si tratta di una tecnica utile per testare query e stored procedure utilizzando le credenziali di un altro utente.

EXECUTE AS LOGIN = 'loginName';
EXECUTE AS USER = 'userName';

È necessario disporre delle autorizzazioni IMPERSONATE per l'account di accesso o l'utente che si intende rappresentare. Questa autorizzazione è implica per sysadmin su tutti i database e per i membri del ruolo db_owner sui database di cui sono proprietari.

Concessione delle autorizzazioni con la clausola EXECUTE AS

È possibile utilizzare la clausola EXECUTE AS nell'intestazione della definizione di una stored procedure, un trigger o una funzione definita dall'utente, ad eccezione delle funzioni inline valutate a livello di tabella. La stored procedure viene quindi eseguita nel contesto del nome utente o della parola chiave specificata nella clausola EXECUTE AS. È possibile creare un utente proxy nel database di cui non è stato eseguito il mapping a un account di accesso, concedendo solo le autorizzazioni necessarie sugli oggetti cui la stored procedure ha accesso. Solo l'utente proxy specificato nella clausola EXECUTE AS deve disporre delle autorizzazioni su tutti gli oggetti cui il modulo ha accesso.

NotaNota

Per alcune azioni, ad esempio TRUNCATE TABLE, non sono disponibili autorizzazioni da concedere.Incorporando l'istruzione all'interno di una stored procedure e specificando un utente proxy che dispone delle autorizzazioni ALTER TABLE, è possibile estendere le autorizzazioni necessarie per troncare la tabella ai chiamanti che dispongono solo delle autorizzazioni EXECUTE per la stored procedure.

Il contesto specificato nella clausola EXECUTE AS è valido per la durata della stored procedura, incluse stored procedure e trigger annidati. Il contesto ritorna al chiamante al termine dell'esecuzione o quando viene eseguita l'istruzione REVERT.

L'utilizzo di una clausola EXECUTE AS in una stored procedure implica tre passaggi:

  1. Creazione di un utente proxy nel database non mappato a un account di accesso. Questo passaggio non è necessario ma risulta utile durante la gestione delle autorizzazioni.
CREATE USER proxyUser WITHOUT LOGIN
  1. Concessione delle autorizzazioni necessarie all'utente proxy.

  2. Aggiunta della clausola EXECUTE AS alla stored procedure o alla funzione definita dall'utente.

CREATE PROCEDURE [procName] WITH EXECUTE AS 'proxyUser' AS ...
NotaNota

È possibile che le applicazioni che richiedono il controllo vengano interrotte perché il contesto di sicurezza originale del chiamante non viene mantenuto.Le funzioni predefinite che restituiscono l'identità dell'utente corrente, ad esempio SESSION_USER, USER, o USER_NAME, restituiscono l'utente associato alla clausola EXECUTE AS, non il chiamante originale.

Utilizzo di EXECUTE AS con REVERT

È possibile utilizzare l'istruzione REVERT Transact-SQL per ripristinare il contesto di esecuzione originale.

Quando si utilizza la clausola facoltativa WITH NO REVERT COOKIE = @variableName, il contesto di esecuzione torna al chiamante purché la variabile @variableName contiene il valore corretto. Viene quindi ripristinato il contesto di esecuzione del chiamante negli ambienti in cui viene utilizzato il pool di connessioni. Poiché il valore di @variableName è noto solo al chiamante dell'istruzione EXECUTE AS, il chiamante è in grado di garantire che il contesto di esecuzione stabilito non venga modificato dall'utente finale che richiama l'applicazione. Alla chiusura della connessione, il contesto viene restituito al pool. Per ulteriori informazioni sul pool di connessioni in ADO.NET, vedere Pool di connessioni di SQL Server (ADO.NET).

Specifica del contesto di esecuzione

Oltre a specificare un utente, è inoltre possibile utilizzare EXECUTE AS con le parole chiave seguenti.

  • CALLER. L'esecuzione come CALLER corrisponde all'impostazione predefinita. Se non vengono specificate altre opzioni, la stored procedure viene eseguita nel contesto di sicurezza del chiamante.

  • OWNER. Con questa parola chiave la stored procedure viene eseguita nel contesto del proprietario. Se la stored procedure viene creata in uno schema di cui è proprietario dbo o il proprietario del database, verrà eseguita con autorizzazioni senza restrizioni.

  • SELF. Con questa parola chiave la stored procedure viene eseguita nel contesto di sicurezza del creatore. Questa opzione equivale all'esecuzione come utente specificato, dove l'utente specificato è la persona che crea o modifica la stored procedure.

Risorse esterne

Per ulteriori informazioni, vedere le seguenti risorse.

Risorsa

Descrizione

Context Switching nella documentazione online di SQL Server 2008 (informazioni in lingua inglese)

Sono inclusi collegamenti ad argomenti in cui viene descritto l'utilizzo della clausola EXECUTE AS.

Utilizzo di EXECUTE AS per la creazione di set di autorizzazioni personalizzati e Utilizzo di EXECUTE AS nei moduli nella documentazione online di SQL Server 2005

Argomenti in cui viene descritto l'utilizzo della clausola EXECUTE AS.

Vedere anche

Concetti

Scenari di sicurezza delle applicazioni in SQL Server (ADO.NET)

Gestione delle autorizzazioni con le stored procedure in SQL Server (ADO.NET)

Scrittura di istruzioni SQL dinamiche protette in SQL Server (ADO.NET)

Firma di stored procedure in SQL Server (ADO.NET)

Modifica di dati con le stored procedure (ADO.NET)

Altre risorse

Protezione di applicazioni ADO.NET

Panoramica della sicurezza di SQL Server (ADO.NET)