Condividi tramite


Collegamenti nella sicurezza dell'integrazione con CLR

Questa sezione descrive il modo in cui parti di codice utente possono chiamare 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 CLR (Common Language Runtime). I collegamenti di chiamata determinano la verifica di un'autorizzazione EXECUTE per il chiamato.

I collegamenti di accesso alle tabelle corrispondono al recupero o alla modifica di valori in una tabella, una vista o una funzione con valori di tabella. Sono simili ai collegamenti di chiamata, ad eccezione del fatto che dispongono di un controllo di accesso più dettagliato in termini di autorizzazioni SELECT, INSERT, UPDATE e DELETE.

I collegamenti controllati indicano che durante l'esecuzione, le autorizzazioni non vengono controllate nella relazione tra oggetti dopo che è stata 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. In fase di esecuzione, verrà verificata un'autorizzazione appropriata rispetto all'oggetto x stesso.

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

I collegamenti controllati sono utili quando non è appropriato o gestibile concedere autorizzazioni a molti oggetti dipendenti. I collegamenti controllati vengono introdotti tra oggetti che definiscono Transact-SQL punti di ingresso 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. Il chiamante non deve disporre delle autorizzazioni per tale assembly o per altri assembly a cui fa riferimento in modo statico. Le autorizzazioni per l'assembly vengono controllate al momento della creazione del punto di ingresso Transact-SQL.

Sicurezza di SQL Server Authorization-Based

Di seguito sono riportate le regole di base dietro i controlli di sicurezza di SQL Server per le chiamate di e tra 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 su cui viene verificata l'autorizzazione.

  1. Tutte le chiamate richiedono EXECUTE l'autorizzazione a meno che le chiamate non si verifichino all'interno dello stesso oggetto. Ciò significa che le 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 REFERENCE l'autorizzazione per il chiamato quando viene creato l'oggetto chiamante. L'autorizzazione viene verificata per il proprietario dell'oggetto chiamante quando viene creato l'oggetto .

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

  4. L'autorizzazione viene controllata rispetto al contesto di esecuzione corrente. È possibile creare procedure e funzioni con un contesto di esecuzione diverso dal chiamante. Gli assembly vengono sempre creati con il contesto di esecuzione della routine, della funzione o del trigger definito su di esso.

Vedere anche

Sicurezza per l'integrazione con CLR