Condividi tramite


Collegamenti nella sicurezza per l'integrazione con CLR

Questa sezione descrive in che modo parti di codice utente possono chiamarsi tra loro in SQL Server, in Transact-SQL o in uno dei linguaggi gestiti. Queste relazioni tra oggetti vengono definite collegamenti.

I collegamenti di chiamata corrispondono a una chiamata di codice, da un utente che chiama un oggetto (ad esempio un batch Transact-SQL che chiama una stored procedure) o da una stored procedure o una funzione di Common Language Runtime (CLR). Tali collegamenti comportano il controllo di un'autorizzazione EXECUTE per il chiamato.

I collegamenti di accesso alle tabelle corrispondono al recupero o alla modifica dei valori in una tabella, una visualizzazione o una funzione con valori di tabella. Sono simili ai collegamenti di chiamata, con l'eccezione che dispongono di un controllo di accesso con granularità fine per le autorizzazioni SELECT, INSERT, UPDATE e DELETE.

I collegamenti controllati indicano che durante l'esecuzione non viene effettuato il controllo delle autorizzazioni all'interno della relazione tra gli oggetti stabilita. Quando è presente un collegamento controllato tra due oggetti (ad esempio, oggetto x e oggetto y), le autorizzazioni per l'oggetto y e altri oggetti a cui si accede dall'oggetto y vengono controllate solo al momento della creazione dell'oggetto x. Al momento della creazione dell'oggetto x, REFERENCE l'autorizzazione viene controllata su y rispetto al proprietario di x. In fase di esecuzione, ad esempio quando un utente chiama l'oggetto x, non sono presenti autorizzazioni controllate in base a y o ad altri oggetti a cui fa riferimento in modo statico. Al momento dell'esecuzione, verrà verificata un'autorizzazione appropriata rispetto all'oggetto x stesso.

I collegamenti controllati vengono sempre utilizzati con la dipendenza dei metadati tra due oggetti. Questa dipendenza dei metadati è una relazione stabilita nei cataloghi SQL Server che impedisce l'eliminazione di un oggetto purché un altro oggetto ne dipenda.

I collegamenti controllati sono utili quando non è consigliabile o possibile concedere autorizzazioni a molti oggetti dipendenti. I collegamenti controllati vengono introdotti tra oggetti che definiscono punti di ingresso Transact-SQL in assembly CLR (ad esempio procedure CLR, trigger, funzioni, tipi e aggregazioni) e gli assembly da cui sono definiti. La sicurezza controllata su questi oggetti implica che per richiamare un punto di ingresso Transact-SQL definito in un assembly CLR, il chiamante necessita solo di un'autorizzazione appropriata per tale punto di ingresso Transact-SQL. Non è necessario che disponga di autorizzazioni su tale assembly o su qualsiasi altro assembly a cui riferimento in modo statico. Le autorizzazioni per l'assembly vengono controllate al momento della creazione del punto di ingresso Transact-SQL.

Sicurezza basata sulle autorizzazioni SQL Server

Di seguito sono riportate le regole di base alla base dei controlli di sicurezza SQL Server per le chiamate di e tra gli oggetti di database basati su CLR. Le prime tre regole definiscono quali autorizzazioni vengono controllate e su quale oggetto; la quarta regola definisce il contesto di esecuzione in base al quale viene verificata l'autorizzazione.

  1. Tutte le chiamate richiedono l'autorizzazione EXECUTE, a meno che non vengano effettuate all'interno dello stesso oggetto e pertanto, trattandosi di chiamate all'interno dello stesso assembly, non richiedono alcun controllo delle autorizzazioni. L'autorizzazione viene controllata in fase di esecuzione.

  2. I collegamenti controllati richiedono l'autorizzazione REFERENCE per il chiamato quando viene creato l'oggetto chiamante. Durante la creazione dell'oggetto, viene effettuato il controllo dell'autorizzazione per il proprietario dell'oggetto chiamante.

  3. I collegamenti di accesso alle tabelle richiedono l'autorizzazione SELECT, INSERT, UPDATE o DELETE corrispondente per la tabella o la visualizzazione a cui si accede.

  4. Viene effettuato il controllo dell'autorizzazione per il contesto di esecuzione corrente. È possibile creare procedure e funzioni con un contesto di esecuzione diverso da quello del chiamante. Gli assembly vengono sempre creati con il contesto di esecuzione della procedura, della funzione o del trigger definito per essi.

Vedere anche

Sicurezza per l'integrazione con CLR