Collegamenti nella protezione per l'integrazione con CLR
In questa sezione viene descritto il modo in cui frammenti di codice utente possono effettuare chiamate reciproche in SQL Server, utilizzando Transact-SQL o uno dei linguaggi gestiti. Queste relazioni tra oggetti vengono definite collegamenti.
Collegamenti di chiamata
I collegamenti di chiamata corrispondono a una chiamata di codice effettuata da un utente che chiama un oggetto, ad esempio un batch Transact-SQL che chiama una stored procedure, o da una funzione o stored procedure CLR (Common Language Runtime). 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. In presenza di un collegamento controllato tra due oggetti, ad esempio l'oggetto x e l'oggetto y, viene eseguito il controllo delle autorizzazioni per l'oggetto y e altri oggetti a cui accede l'oggetto y solo durante la creazione dell'oggetto x. In fase di creazione dell'oggetto x, viene effettuato il controllo dell'autorizzazione REFERENCE su y per il proprietario di x. In fase di esecuzione, ad esempio quando un utente chiama l'oggetto x, non viene effettuato il controllo delle autorizzazioni per y o altri oggetti ai quali fa riferimento in modo statico. In fase di esecuzione, verrà verificata la presenza di un'autorizzazione appropriata per l'oggetto x stesso.
I collegamenti controllati vengono sempre utilizzati con la dipendenza dei metadati tra due oggetti. Tale dipendenza è una relazione stabilita nei cataloghi di SQL Server che impedisce che un oggetto venga eliminato finché un altro oggetto dipende da questo.
I collegamenti controllati sono utili quando non è consigliabile o possibile concedere autorizzazioni a molti oggetti dipendenti. Vengono utilizzati in SQL Server 2000 per le colonne calcolate e le colonne con indicizzazione full-text. A partire da SQL Server 2005, i collegamenti controllati sono stati introdotti tra oggetti che definiscono punti di ingresso Transact-SQL in assembly CLR, ad esempio procedure CLR, trigger, funzioni, tipi e aggregati, e gli assembly da cui sono definiti. La protezione controllata per questi oggetti implica che per poter richiamare un punto di ingresso Transact-SQL definito in un assembly CLR, il chiamante deve disporre solo di un'autorizzazione appropriata su 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 sull'assembly vengono controllate durante la creazione del punto di ingresso Transact-SQL.
Protezione basata sulle autorizzazioni SQL Server
Di seguito sono riportate le regole di base dei controlli di protezione di SQL Server per le chiamate di e tra oggetti di database basati su CLR. Le prime tre regole definiscono le autorizzazioni controllate e l'oggetto in base al quale vengono controllate, mentre la quarta regola definisce il contesto di esecuzione in base al quale viene controllata 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 o DELETE 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.