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.
Collegamenti di chiamata
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.
Collegamenti di accesso alle tabelle
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.
Collegamenti controllati
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.
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.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.I collegamenti di accesso alle tabelle richiedono l'autorizzazione
SELECT
,INSERT
,UPDATE
oDELETE
corrispondente per la tabella o la visualizzazione a cui si accede.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.